使用Spark Streaming懒惰地执行DB写入

时间:2015-10-17 14:28:04

标签: apache-spark hbase spark-streaming

当Spark Streaming正在运行时,不执行HBase puts,只有当我关闭Spark时 - 它才会尝试完全执行所有的放置

val inputRdd = FlumeUtils.createStream(ssc, "server", 44444)
  inputRdd.foreachRDD({ rdd =>
    rdd.foreachPartition(partitionOfRecords => {
      val hbaseClient = new HBaseClient(zookeeper)
      partitionOfRecords.foreach({ event =>
         hbaseClient.put(parse(event))
         hbaseClient.flush()

1 个答案:

答案 0 :(得分:2)

好的 - 我找到了答案 - 显然我的代码是正确的,问题是我没有留下足够的线程来处理数据

http://spark.apache.org/docs/latest/streaming-programming-guide.html """ 如果您使用基于接收器的输入DStream(例如套接字,Kafka,Flume等),那么单线程将用于运行接收器,不留下用于处理接收数据的线程。因此,当在本地运行时,总是使用“local [n]”作为主URL,其中n>要运行的接收器数量(有关如何设置主站的信息,请参阅Spark属性)。 """

使用本地[*]修复了问题