推荐使用Scala访问HBase的方法

时间:2018-05-18 17:20:42

标签: scala apache-spark hbase apache-flink scalding

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

3 个答案:

答案 0 :(得分:2)

根据我使用Flink Cassandra连接器编写数据Cassandra的经验,我认为最好的方法是使用Flink内置连接器。由于Flink 1.4.3您可以使用HBase Flink连接器。见here

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

取决于“推荐”是什么意思,我想。

DIY

鳗鱼

如果您只想从Scala应用程序访问HBase上的数据,您可能需要查看Eel,其中包括与 Big Data <中的许多存储格式和系统进行交互的库/ em> landscape,本地用Scala编写。

您很可能对使用eel-hbase模块感兴趣,该模块在少数版本中包含HBaseSource类(以及HBaseSink)。它实际上是最近我注意到README仍然提到HBase不受支持。 Hive没有明确的示例,但源和接收器以类似的方式工作。

风筝

另一个替代方案可能是Kite,也有a quite extensive set of examples你可以从中获取灵感(包括HBase),但它看起来不像Eel那样活跃。

大数据框架

如果你想要一个可以帮助你的框架,而不是用库来酿造你自己的解决方案。当然,你必须考虑到一些学习曲线。

火花

Spark是一个相当成熟的项目,HBase项目本身就构建了Spark 2.1.1的连接器(此处为Scaladocs)。 Here是一个介绍性的演讲,可以帮助你。

一般的想法是,您可以按this example

中的建议使用此自定义数据源
sqlContext
  .read
  .options(Map(HBaseTableCatalog.tableCatalog->cat, HBaseRelation.HBASE_CONFIGFILE -> conf))
  .format("org.apache.spark.sql.execution.datasources.hbase")
  .load()

通过Spark SQL API授予您访问HBase数据的权限。这是一个简短的摘录from the same example

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)最新稳定版本中的a link to an example您可能有兴趣看看在