我正在尝试将Spark Streaming与Kafka(版本1.1.0)一起使用,但由于此错误,Spark作业不断崩溃:
14/11/21 12:39:23 ERROR TaskSetManager: Task 3967.0:0 failed 4 times; aborting job
org.apache.spark.SparkException: Job aborted due to stage failure: Task 3967.0:0 failed 4 times, most recent failure: Exception failure in TID 43518 on host ********: java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1017)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1015)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1015)
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 3967.0:0 failed 4 times, most recent failure: Exception failure in TID 43518 on host ********: java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1017)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1015)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1015)
我从日志中获得的唯一相关信息是:
14/11/21 12:34:18 INFO MemoryStore: Block input-0-1416573258200 stored as bytes to memory (size 85.8 KB, free 2.3 GB)
14/11/21 12:34:18 INFO BlockManagerMaster: Updated info of block input-0-1416573258200
14/11/21 12:34:18 INFO BlockGenerator: Pushed block input-0-1416573258200
org.apache.spark.SparkException: Error sending message to BlockManagerMaster [message = GetLocations(input-0-1416573258200)]
java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
14/11/21 12:37:35 INFO BlockManagerInfo: Added input-0-1416573258200 in memory on ********:43117 (size: 85.8 KB, free: 2.3 GB)
org.apache.spark.SparkException: Error sending message to BlockManagerMaster [message = GetLocations(input-0-1416573258200)]
java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
org.apache.spark.SparkException: Job aborted due to stage failure: Task 3967.0:0 failed 4 times, most recent failure: Exception failure in TID 43518 on host ********: java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 3967.0:0 failed 4 times, most recent failure: Exception failure in TID 43518 on host ********: java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
java.lang.Exception: Could not compute split, block input-0-1416573258200 not found
示例代码:
SparkConf conf = new SparkConf();
JavaSparkContext sc = new JavaSparkContext(conf);
JavaStreamingContext jssc = new JavaStreamingContext(sc, new Duration(5000));
jssc.checkpoint(checkpointDir);
HashMap<String, Integer> topics = new HashMap<String, Integer>();
topics.put(KAFKA_TOPIC, 1);
HashMap<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("group.id", "spark-streaming-test");
kafkaParams.put("zookeeper.connect", ZOOKEEPER_QUORUM);
kafkaParams.put("zookeeper.connection.timeout.ms", "1000");
kafkaParams.put("auto.offset.reset", "smallest");
JavaPairReceiverInputDStream<String, String> kafkaStream =
KafkaUtils.createStream(jssc, String.class, String.class, StringDecoder.class, StringDecoder.class, kafkaParams, topics, StorageLevels.MEMORY_AND_DISK_SER);
JavaPairDStream<String, String> streamPair = kafkaStream.flatMapToPair(...).reduceByKey(...);
我不确定这个问题的原因是什么。
答案 0 :(得分:3)
检查以下内容。
1)您是否正确地创建了流式上下文,如
curl -v --request DELETE --user "login:password" --silent http://nexusHost/service/local/metadata/repositories/myRepository/content
您的初始化不正确。
看看下面的
例如:recoverableNetworkCount App
的代码2)您是否启用了属性提前写入日志“spark.streaming.receiver.writeAheadLog.enable”
3)检查Streaming UI中流媒体的稳定性。 处理时间&lt;批次间隔。
答案 1 :(得分:2)
你试过inputs.persist(StorageLevel.MEMORY_AND_DISK_SER)
。
答案 2 :(得分:0)
这是由于Spark流模型。它以批处理间隔收集数据,然后将其发送出去以进行处理以供火花引擎使用。 Spark引擎不知道它来自流系统,也没有将其传递回流组件。
这意味着没有像Storm或Flink这样的本机流传输系统中的流控制(背压控制),后者可以根据处理速率很好地平滑喷口/源流。
来自https://spark.apache.org/docs/latest/streaming-programming-guide.html
解决此问题的一种方法是将处理信息/确认手动传递回Receiver组件-当然,这也意味着我们需要使用自定义接收器。此时,我们开始构建功能Storm / Flink等。