推荐使用Scala访问HBase的方法

Ell*_*tus 5 hbase scala scalding apache-spark apache-flink

现在不再维护SpyGlass,使用Scala/Scalding访问HBase的推荐方法是什么?一个类似的问题被要求在2013年,但大多数建议的链接要么死或倒闭的项目.唯一有用的链接是Apache Flink.这被认为是现在最好的选择吗?即使没有维护,人们仍然会为新项目推荐SpyGlass吗?性能(大规模并行)和可测试性是优先考虑的事项.

ste*_*ino 1

我想取决于你所说的“推荐”是什么意思。

DIY

鳗鱼

如果您只想从 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) 的示例的链接,您可能有兴趣查看一下。