使用scala访问hbase的推荐方法

r55awzrz  于 2021-06-08  发布在  Hbase
关注(0)|答案(3)|浏览(582)

既然不再维护spyglass,那么使用scala/Bolding访问hbase的建议方法是什么?2013年提出了一个类似的问题,但大多数建议的链接要么是死的,要么是与不存在的项目有关。唯一有用的链接是apache flink。这被认为是现在最好的选择吗?人们还在为新项目推荐spyglass吗,尽管它没有得到维护?性能(大规模并行)和可测试性是优先级。

gudnpqoy

gudnpqoy1#

我想这要看你说的“推荐”是什么意思了。

自己动手

鳗鱼

如果您只想从scala应用程序访问hbase上的数据,那么您可能需要看看eel,它包括与大数据环境中的许多存储格式和系统交互的库,并且是用scala本机编写的。
您很可能对使用 eel-hbase 模块,其中包括 HBaseSource 类(以及 HBaseSink ). 实际上是最近的事,我刚注意到 README 仍然提到不支持hbase。对于hive没有明确的例子,但是源和汇的工作方式相似。

风筝

另一个选择可能是kite,它也有一组非常广泛的例子,你可以从中获得灵感(包括hbase),但它看起来不像eel那么活跃。

大数据框架

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

Spark

spark是一个相当成熟的项目,hbase项目本身为spark2.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),您可能有兴趣看看。

9jyewag0

9jyewag02#

根据我使用flink cassandra连接器编写数据cassandra的经验,我认为最好的方法是使用flink内置连接器。自从Flink 1.4.3 您可以使用hbase flink连接器。看到这里了吗

wfveoks0

wfveoks03#

我使用java连接到flink中的hbase。只需在中创建hbase连接对象 open 把它关在里面 close richfunction方法(即richsinkfunction)。这些方法由每个flink槽调用一次。
我想你在斯卡拉也可以这样做。

相关问题