代码之家  ›  专栏  ›  技术社区  ›  Ellen Spertus

使用Scala访问HBase的推荐方法

  •  5
  • Ellen Spertus  · 技术社区  · 6 年前

    既然 SpyGlass 已不再维护,建议使用Scala/Bullowing访问HBase的方法是什么?A. similar question 在2013年被问到,但大多数建议的链接要么已经死了,要么是与不存在的项目有关。唯一有用的链接是 Apache Flink .这被认为是当今最好的选择吗?人们还在为新项目推荐SpyGlass吗,即使它没有得到维护?性能(大规模并行)和可测试性是优先级。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Soheil Pourbafrani    6 年前

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

        2
  •  2
  •   Vitaly Tsvetkoff    6 年前

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

    我想你也可以在Scala做类似的事情。

        3
  •  1
  •   stefanobaghino    6 年前

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

    自己动手做

    鳗鱼

    如果您只想从Scala应用程序访问HBase上的数据,您可能需要看一下 Eel ,其中包括可与存储系统中的多种存储格式和系统进行交互的库 大数据 风景画,是用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"))
    

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

    弗林克

    弗林克已经回答了两个问题,所以我不会再补充更多,除了 a link to an example 从撰写本文时的最新稳定版本(1.4.2)开始,您可能有兴趣查看。