Spark流式传输待批次

时间:2017-08-04 01:08:30

标签: apache-spark apache-kafka spark-streaming

我正在运行一个Spark Streaming应用,该应用从Kafka读取数据(使用Direct Stream方法)并将结果发布回Kafka。应用程序的输入速率以及应用程序的吞吐量保持稳定约一个小时或两个小时。之后,我开始看到批次在Active Batches队列中保留了很长时间(30分钟+)。 Spark driver日志表示以下两种类型的错误,这些错误的发生时间与卡住的批次的开始时间一致:

第一个错误类型

ERROR LiveListenerBus: Dropping SparkListenerEvent because no remaining room in event queue. This likely means one of the SparkListeners is too slow and cannot keep up with the rate at which tasks are being started by the scheduler.

第二种错误类型

ERROR StreamingListenerBus: Listener StreamingJobProgressListener threw an exception
java.util.NoSuchElementException: key not found: 1501806558000 ms
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.mutable.HashMap.apply(HashMap.scala:65)
  at org.apache.spark.streaming.ui.StreamingJobProgressListener.onOutputOperationCompleted(StreamingJobProgressListener.scala:134)
  at org.apache.spark.streaming.scheduler.StreamingListenerBus.doPostEvent(StreamingListenerBus.scala:67)
  at org.apache.spark.streaming.scheduler.StreamingListenerBus.doPostEvent(StreamingListenerBus.scala:29)
  at org.apache.spark.util.ListenerBus$class.postToAll(ListenerBus.scala:63)
  at org.apache.spark.streaming.scheduler.StreamingListenerBus.postToAll(StreamingListenerBus.scala:29)
  at org.apache.spark.streaming.scheduler.StreamingListenerBus.onOtherEvent(StreamingListenerBus.scala:43)
  at org.apache.spark.scheduler.SparkListenerBus$class.doPostEvent(SparkListenerBus.scala:75)
  at org.apache.spark.scheduler.LiveListenerBus.doPostEvent(LiveListenerBus.scala:36)
  at org.apache.spark.scheduler.LiveListenerBus.doPostEvent(LiveListenerBus.scala:36)
  at org.apache.spark.util.ListenerBus$class.postToAll(ListenerBus.scala:63)
  at org.apache.spark.scheduler.LiveListenerBus.postToAll(LiveListenerBus.scala:36)
  at org.apache.spark.scheduler.LiveListenerBus$$anon$1$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(LiveListenerBus.scala:94)
  at org.apache.spark.scheduler.LiveListenerBus$$anon$1$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(LiveListenerBus.scala:79)
  at org.apache.spark.scheduler.LiveListenerBus$$anon$1$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(LiveListenerBus.scala:79)
  at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
  at org.apache.spark.scheduler.LiveListenerBus$$anon$1$$anonfun$run$1.apply$mcV$sp(LiveListenerBus.scala:78)
  at org.apache.spark.util.Utils$.tryOrStopSparkContext(Utils.scala:1279)
  at org.apache.spark.scheduler.LiveListenerBus$$anon$1.run(LiveListenerBus.scala:77)

但是,我不确定如何解释这些错误,尽管进行了广泛的在线搜索,但我找不到与此相关的任何有用信息。

问题

  1. 这些错误意味着什么?它们是否表明资源有限(例如:CPU,内存等)?
  2. 解决这些错误的最佳方法是什么?
  3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

批次持续时间是否小于实际批处理时间?默认批处理队列大小为1000,因此可以溢出spark spark batch queue。