Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark:如何检索哪个阶段失败的原始数据?_Java_Apache Spark_Spark Streaming - Fatal编程技术网

Java Spark:如何检索哪个阶段失败的原始数据?

Java Spark:如何检索哪个阶段失败的原始数据?,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,当处理过程中出现异常时,Spark会尝试再次处理三次,如下面的日志所示。然后,它将阶段标记为失败。我想检索Stage以后无法分析的所有数据,或者对其执行任何其他操作。如何做到这一点?我正在用SparkListeners探索这一点,但这似乎是开发人员API 谢谢 16/03/23 18:33:00 WARN TaskSetManager: Lost task 1.0 in stage 11.0 (TID 88, 192.168.213.53): java.lang.RuntimeException

当处理过程中出现异常时,Spark会尝试再次处理三次,如下面的日志所示。然后,它将阶段标记为失败。我想检索Stage以后无法分析的所有数据,或者对其执行任何其他操作。如何做到这一点?我正在用SparkListeners探索这一点,但这似乎是开发人员API

谢谢

16/03/23 18:33:00 WARN TaskSetManager: Lost task 1.0 in stage 11.0 (TID 88, 192.168.213.53): java.lang.RuntimeException: Amit baby its exception time
    at com.yourcompany.custom.identifier.JavaRecoverableNetworkWordCount$1.call(JavaRecoverableNetworkWordCount.java:141)
    at com.yourcompany.custom.identifier.JavaRecoverableNetworkWordCount$1.call(JavaRecoverableNetworkWordCount.java:131)
    at org.apache.spark.streaming.api.java.JavaDStreamLike$$anonfun$fn$1$1.apply(JavaDStreamLike.scala:172)
    at org.apache.spark.streaming.api.java.JavaDStreamLike$$anonfun$fn$1$1.apply(JavaDStreamLike.scala:172)
    at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
    at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:203)
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:73)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
    at org.apache.spark.scheduler.Task.run(Task.scala:88)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

16/03/23 18:33:00 INFO TaskSetManager: Starting task 1.1 in stage 11.0 (TID 89, 192.168.213.53, NODE_LOCAL, 2535 bytes)
16/03/23 18:33:00 INFO TaskSetManager: Lost task 1.1 in stage 11.0 (TID 89) on executor 192.168.213.53: java.lang.RuntimeException (Amit baby its exception time) [duplicate 1]
16/03/23 18:33:00 INFO TaskSetManager: Starting task 1.2 in stage 11.0 (TID 90, 192.168.213.53, NODE_LOCAL, 2535 bytes)
16/03/23 18:33:00 INFO TaskSetManager: Lost task 1.2 in stage 11.0 (TID 90) on executor 192.168.213.53: java.lang.RuntimeException (Amit baby its exception time) [duplicate 2]
16/03/23 18:33:00 INFO TaskSetManager: Starting task 1.3 in stage 11.0 (TID 91, 192.168.213.53, NODE_LOCAL, 2535 bytes)
16/03/23 18:33:00 INFO TaskSetManager: Lost task 1.3 in stage 11.0 (TID 91) on executor 192.168.213.53: java.lang.RuntimeException (Amit baby its exception time) [duplicate 3]
16/03/23 18:33:00 ERROR TaskSetManager: Task 1 in stage 11.0 failed 4 times; aborting job
16/03/23 18:33:00 INFO TaskSchedulerImpl: Removed TaskSet 11.0, whose tasks have all completed, from pool 
16/03/23 18:33:00 INFO TaskSchedulerImpl: Cancelling stage 11

这是无法做到的。任务中处理的数据通常不会比它所属的作业的寿命长。当阶段失败时,作业将不再存在,数据将进行垃圾收集。没有参考资料,所以你无法得到它

SparkListener确实是DeveloperAPI,但这并不意味着您不能使用它。它仍然是一个公共API。这只是意味着它不能保证在Spark版本之间保持稳定。我们大概一年前就开始使用SparkListener了,它实际上非常稳定。请随意试一试。但我认为这不能解决你的问题


不过,这是一个有效且有趣的想法。能够访问数据将大大有助于调试。您可以在中输入功能请求。但这不是一件简单的事情。Spark任务比你给它的用户代码要复杂得多。因此,即使任务的输入可用于调试,如何更好地利用它也不是一件小事。不管怎样,我认为这值得一谈

为什么这个问题被否决了?你也因为离题而被投了一票。这可能是与否决票一起出现的。我不明白为什么有人会认为这个问题是离题的。检查点写出了整个RDD。是的,如果你在一个阶段之前检查每个RDD,你几乎可以重建任务输入。但这将是一个巨大的开销。您不能在失败时返回并检查输入。感谢您的回答,还有一件事,在上下文启动后,有没有办法更新DAG?很抱歉一次抛出这么多内容。是的,我当然不能返回,但不能使用SparkListener的onStageCompleted方法检测失败。创建SparkContext时,DAG为空。每个RDD操作都会更新DAG。我想我不太理解这个问题。关于
onStageCompleted
:是的,您可以检测到故障,但到那时创建检查点已经太晚了。所以您需要提前创建一个检查点,但对每个RDD操作都这样做会降低性能。(也许你脑子里想的东西真的能用。最好试试!)