Hbase hadoop中NoSql数据库的实时数据管道

Hbase hadoop中NoSql数据库的实时数据管道,hbase,apache-flink,apache-beam,flume,cassandra-3.0,Hbase,Apache Flink,Apache Beam,Flume,Cassandra 3.0,我正致力于在hadoop中构建实时流媒体应用程序,并尝试了以下技术将数据推送到hbase,但我正在寻找有关可用技术的更多细节 火花流-使用微量配料 卡夫卡连接-没有可用的连接器 Nifi-似乎在工作,但它仍在批量推送数据 是否有其他技术可以完美地将数据实时推送到Hbase以发布实时仪表板 这保证了只有一种语义,避免了批处理,并且能够实时地将数据推送到任何nosql数据库和开放源代码 看来flink、splunk、flume、beam是一些可供实验的技术,对任何nosql数据库了解这些技术会有很大

我正致力于在hadoop中构建实时流媒体应用程序,并尝试了以下技术将数据推送到hbase,但我正在寻找有关可用技术的更多细节

  • 火花流-使用微量配料
  • 卡夫卡连接-没有可用的连接器
  • Nifi-似乎在工作,但它仍在批量推送数据
  • 是否有其他技术可以完美地将数据实时推送到Hbase以发布实时仪表板

    这保证了只有一种语义,避免了批处理,并且能够实时地将数据推送到任何nosql数据库和开放源代码


    看来flink、splunk、flume、beam是一些可供实验的技术,对任何nosql数据库了解这些技术会有很大帮助。

    我建议您使用Spark结构化流媒体

    内部结构化的流式查询也使用微批处理引擎进行处理,但端到端延迟低至100毫秒,且仅保证一次容错

    此外,自Spark 2.3以来,通过一种称为连续处理的新的低延迟处理模型,我们可以实现低至1毫秒的端到端延迟,并且至少有一次保证

    有一个开源的Hortonworks Spark Hbase连接器包:“com.Hortonworks:shc core:1.1.0-2.1-s_2.11”

    要将Datafram摄取到HBase目录表中,需要包含架构信息。下面的目录定义了一个HBase表的架构,该表的名称为table1,行键为key,列数为col1-col8。请注意,还必须将rowkey详细定义为列(col0),该列具有特定的cf(rowkey)


    请参阅:

    Flume的构建正是为了您想要的目的:将数据从一个系统推送到另一个系统。由于您可以将其配置为所需的批处理大小(如果您只关心延迟,那么它将非常小),因此它应该尽可能好。它已经为HBase提供了一个接收器,但如果将来需要切换存储,最糟糕的情况是您必须自己实现该接收器


    弗林克也可以做你想做的事,因为你也可以。然而,它的构建是为了让您能够执行更精细的转换,所以我希望它的性能比Flume稍差一点,但没有什么比为您的特定用例自己进行基准测试更合适的了。

    谢谢!!每个事件100毫秒?结构化流式处理作为一系列小批量作业,100毫秒延迟用于批处理。请注意,NiFi允许您在需要时将批处理大小设置为1。
    import org.apache.spark.sql.{SQLContext, _}
    import org.apache.spark.sql.execution.datasources.hbase._
    import org.apache.spark.{SparkConf, SparkContext}
    import spark.sqlContext.implicits._
    
    def catalog = s"""{
        |"table":{"namespace":"default", "name":"table1"},
        |"rowkey":"key",
        |"columns":{
          |"col0":{"cf":"rowkey", "col":"key", "type":"string"},
          |"col1":{"cf":"cf1", "col":"col1", "type":"boolean"},
          |"col2":{"cf":"cf2", "col":"col2", "type":"double"},
          |"col3":{"cf":"cf3", "col":"col3", "type":"float"},
          |"col4":{"cf":"cf4", "col":"col4", "type":"int"},
          |"col5":{"cf":"cf5", "col":"col5", "type":"bigint"},
          |"col6":{"cf":"cf6", "col":"col6", "type":"smallint"},
          |"col7":{"cf":"cf7", "col":"col7", "type":"string"},
          |"col8":{"cf":"cf8", "col":"col8", "type":"tinyint"}
        |}
      |}""".stripMargin
    
    df.writeStream.options(
      Map(HBaseTableCatalog.tableCatalog -> catalog, HBaseTableCatalog.newTable -> "5"))
      .outputMode("update")
      .format("org.apache.spark.sql.execution.datasources.hbase")
      .start()