Ell*_*tus 5 hbase scala scalding apache-spark apache-flink
现在不再维护SpyGlass,使用Scala/Scalding访问HBase的推荐方法是什么?一个类似的问题被要求在2013年,但大多数建议的链接要么死或倒闭的项目.唯一有用的链接是Apache Flink.这被认为是现在最好的选择吗?即使没有维护,人们仍然会为新项目推荐SpyGlass吗?性能(大规模并行)和可测试性是优先考虑的事项.
我想取决于你所说的“推荐”是什么意思。
如果您只想从 Scala 应用程序访问 HBase 上的数据,您可能需要看看Eel ,它包含与大数据领域中的许多存储格式和系统交互的库,并且是用 Scala 原生编写的。
您很可能对使用该模块感兴趣eel-hbase,该模块在一些版本中包含一个HBaseSource类(以及一个HBaseSink)。实际上是最近我才注意到README仍然提到不支持 HBase。Hive 没有明确的示例,但源和接收器的工作方式类似。
另一种选择是Kite,它也有一组相当广泛的示例,您可以从中汲取灵感(包括 HBase),但它看起来不像 Eel 那样活跃。
如果您想要一个可以帮助您的框架,而不是使用库来构建自己的解决方案。当然,您必须考虑一些学习曲线。
Spark 是一个相当成熟的项目,HBase 项目本身为 Spark 2.1.1 构建了一个连接器(此处为Scaladocs)。这是一个介绍性的演讲,可以为您提供帮助。
一般的想法是,您可以按照本示例中的建议使用此自定义数据源:
sqlContext
.read
.options(Map(HBaseTableCatalog.tableCatalog->cat, HBaseRelation.HBASE_CONFIGFILE -> conf))
.format("org.apache.spark.sql.execution.datasources.hbase")
.load()
Run Code Online (Sandbox Code Playgroud)
让您可以通过 Spark SQL API 访问 HBase 数据。以下是同一示例的简短摘录:
val df1 = withCatalog(cat1, conf1)
val df2 = withCatalog(cat2, conf2)
val s1 = df1.filter($"col0" <= "row120" && $"col0" > "row090").select("col0", "col2")
val s2 = df2.filter($"col0" <= "row150" && $"col0" > "row100").select("col0", "col5")
val result = s1.join(s2, Seq("col0"))
Run Code Online (Sandbox Code Playgroud)
抛开性能考虑不谈,您可能会发现该语言对于数据操作来说感觉非常自然。
两个答案已经涉及 Flink,所以我不会添加更多内容,除了一个指向撰写本文时最新稳定版本 (1.4.2) 的示例的链接,您可能有兴趣查看一下。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |