使用 Scala 访问 HBase 的推荐方法



现在SpyGlass不再被维护,使用Scala/Scalding访问HBase的推荐方法是什么?2013年也提出了类似的问题,但大多数建议的链接要么已经死了,要么已经失效了。唯一有用的链接是Apache Flink。这被认为是当今最好的选择吗?人们是否仍然推荐SpyGlass用于新项目,即使它没有得到维护?性能(大规模并行(和可测试性是优先事项。

根据我使用 FlinkCassandra 连接器写入数据 Cassandra 的经验,我认为最好的方法是使用 Flink 内置连接器。由于 Flink1.4.3您可以使用 HBase Flink 连接器。看这里

我使用 java 连接到 Flink 中的 HBase。只需在open中创建HBase Connection对象,并在RichFunction(即RichSinkFunction(的close方法中关闭它。这些方法由每个 flink 插槽调用一次。

我认为你也可以在 Scala 中做这样的事情。

我猜这取决于你所说的"推荐"是什么意思。

自己动手

鳗鱼

如果你只想从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()

允许你通过 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"))

撇开性能考虑不谈,正如您可能看到的那样,该语言对于数据操作来说感觉非常自然。

眨眼

有两个答案已经涉及 Flink,所以我不会添加更多,除了在撰写本文时(1.4.2(中指向您可能有兴趣查看的最新稳定版本示例的链接。

最新更新