【问题标题】:DB writes are executed lazily with Spark Streaming使用 Spark Streaming 延迟执行 DB 写入
【发布时间】:2016-01-16 05:21:38
【问题描述】:

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

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()

【问题讨论】:

  • 您是否尝试在 forechPartition 中创建 HBaseClient ?
  • 这就是@axlpado-AgileLab 的样子
  • @axlpado-AgileLab 我已经更新了代码——它已经在里面了
  • partitionOfRecords.foreach( event => { hbaseClient.put(parse(event)) hbaseClient.flush()})

标签: apache-spark hbase spark-streaming


【解决方案1】:

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

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

使用本地 [*] 解决了问题

【讨论】:

  • 是的,这就是 RTFM 的情况
猜你喜欢
  • 1970-01-01
  • 2017-11-04
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多