我正在努力在hadoop中构建实时流应用程序,并且我已经尝试了以下技术将数据推送到hbase,但是我正在寻找有关可用技术的更多详细信息
是否有任何其他技术可以完美地将数据实时推送到Hbase以发布实时仪表板。
可以保证一种语义,避免批处理,并且可以实时将数据推送到任何nosql数据库和开放源代码吗?
似乎 flink,splunk,flume,beam 是可以进行试验的一些技术,对任何nosql数据库的这些技术的一点见识都会有很大的帮助
答案 0 :(得分:2)
我建议您使用火花结构化流。
内部结构化流查询也可以使用微批量处理引擎进行处理,但是端到端的延迟低至 100毫秒,并且可以保证一次容错。
自Spark 2.3起,借助称为连续处理的新低延迟处理模型,我们可以以最少一次的保证实现低至 1毫秒的端到端延迟。 / p>
有一个开源的Hortonworks Spark-Hbase连接器软件包:“ com.hortonworks:shc-core:1.1.0-2.1-s_2.11”。
要将Datafram提取到HBase目录表,需要包含模式信息。下面的目录为名称为table1,行键为键和列数(col1-col8)的HBase表定义了一种模式。请注意,行键还必须详细定义为列(col0),该列具有特定的cf(行键)。
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()
答案 1 :(得分:1)
Flume的构建完全符合您的目的:将数据从一个系统推送到另一个系统。由于您可以将其配置为具有所需的批处理大小(如果仅考虑延迟,那么这将非常小),因此它应该尽可能地好。它已经有一个用于HBase的接收器,但是如果将来您需要切换存储,则可能发生的最坏情况是您必须自己实现接收器。
Flink也可以做您想做的事情,因为您也可以configure it to be optimized for latency。但是,它的构建是为了使您可以执行更精细的转换,因此我希望它的性能不如Flume,但是没有什么比自己针对特定用例进行基准测试更容易了。