既然不再维护SpyGlass,那么使用Scala/烫伤访问HBase的推荐方法是什么呢?2013年,相似问题被问到了,但大多数建议的链接要么已经失效,要么已经失效。唯一似乎有用的链接是到Apache Flink。这被认为是当今最好的选择吗?人们是否仍然推荐SpyGlass作为新项目,即使它没有被维护?性能(大规模并行)和可测试性是优先考虑的问题。
发布于 2018-05-23 10:06:29
取决于你所说的“推荐”是什么意思,我想。
DIY
鳗鱼
如果您只想从Scala应用程序中访问HBase上的数据,那么您可能想看看鳗鱼,它包括与大数据景观中的许多存储格式和系统交互的库,并且是用Scala编写的。
您很可能对使用eel-hbase模块感兴趣,该模块在几个版本中包括一个HBaseSource类(以及一个HBaseSink)。实际上,最近我注意到README仍然提到不支持HBase。在Hive中没有明确的示例,但是源和接收器以类似的方式工作。
风筝
另一种选择可能是风筝,它也有您可以从其中获得灵感的一组相当广泛的例子 (包括HBase),但是它看起来不像Eel那么活跃。
大数据框架
如果您想要一个框架来帮助您,而不是用库来酝酿您自己的解决方案。当然,你必须考虑一些学习曲线。
火花
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访问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)时来自最新稳定版本的指向示例的链接,您可能会对此感兴趣。
发布于 2018-05-19 05:37:03
根据我使用Flink Cassandra连接器编写数据Cassandra的经验,我认为最好的方法是使用Flink内置连接器。因为Flink 1.4.3,您可以使用HBase Flink连接器。请参阅这里
发布于 2018-05-22 10:56:09
我使用java连接到Flink中的HBase。只需在open中创建open连接对象,并在RichFunction的close方法(即RichSinkFunction)中关闭它。这些方法由每个flink时隙调用一次。
我认为在Scala中也可以这样做。
https://stackoverflow.com/questions/50416406
复制相似问题