如何取消Spark Hadoop RDD计算
How to cancel Spark Hadoop RDD computation
假设我有 NewHadoopRDD
并且其中一个拆分在计算过程中失败了。有了本地跑步者,我很容易看到这个过程的所有阶段。
我看到任务失败,但调度程序开始下一个任务,并且仅在此通知任务失败之后。
15/02/19 20:58:58 INFO scheduler.TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1, localhost, PROCESS_LOCAL, 1347 bytes)
15/02/19 20:58:58 INFO executor.Executor: Running task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.RuntimeException: java.sql.SQLException:
...
15/02/19 20:58:58 ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times; aborting job
现在阶段正在取消
15/02/19 20:58:58 ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times; aborting job
15/02/19 20:58:58 INFO scheduler.TaskSchedulerImpl: Cancelling stage 0
15/02/19 20:58:58 INFO executor.Executor: Executor is trying to kill task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 INFO scheduler.TaskSchedulerImpl: Stage 0 was cancelled
并且控制甚至传递给上下文关闭...
15/02/19 20:58:58 INFO ui.SparkUI: Stopped Spark web UI at http://node4.hbase.vitech.com.ua:4040
但后来我看到了下一阶段任务的日志输出。
15/02/19 20:58:58 INFO rdd.NewHadoopRDD: Input split: 0+0 ...
并且只有在调度程序停止时我才看到任务被终止(在 statusUpdate 上!)。
15/02/19 20:58:58 INFO scheduler.DAGScheduler: Stopping DAGScheduler
15/02/19 20:58:58 INFO executor.Executor: Executor killed task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 ERROR scheduler.TaskSchedulerImpl: Exception in statusUpdate
我可以做些什么来更快地清理所有 RDD 资源吗? unpersist()
在这里没有帮助。我在上下文停止记录之前看到它的日志。但无论如何我会看到下一个任务日志。
无法更快地恢复。一旦任务开始,它将自行完成或失败。阶段失败或取消不会中断正在进行的任务。
我觉得原因基本上是threads cannot be forcefully killed in Java。如果这是一个问题,您可以选择更多分区。较小的任务完成得更快。
假设我有 NewHadoopRDD
并且其中一个拆分在计算过程中失败了。有了本地跑步者,我很容易看到这个过程的所有阶段。
我看到任务失败,但调度程序开始下一个任务,并且仅在此通知任务失败之后。
15/02/19 20:58:58 INFO scheduler.TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1, localhost, PROCESS_LOCAL, 1347 bytes)
15/02/19 20:58:58 INFO executor.Executor: Running task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.RuntimeException: java.sql.SQLException:
...
15/02/19 20:58:58 ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times; aborting job
现在阶段正在取消
15/02/19 20:58:58 ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times; aborting job
15/02/19 20:58:58 INFO scheduler.TaskSchedulerImpl: Cancelling stage 0
15/02/19 20:58:58 INFO executor.Executor: Executor is trying to kill task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 INFO scheduler.TaskSchedulerImpl: Stage 0 was cancelled
并且控制甚至传递给上下文关闭...
15/02/19 20:58:58 INFO ui.SparkUI: Stopped Spark web UI at http://node4.hbase.vitech.com.ua:4040
但后来我看到了下一阶段任务的日志输出。
15/02/19 20:58:58 INFO rdd.NewHadoopRDD: Input split: 0+0 ...
并且只有在调度程序停止时我才看到任务被终止(在 statusUpdate 上!)。
15/02/19 20:58:58 INFO scheduler.DAGScheduler: Stopping DAGScheduler
15/02/19 20:58:58 INFO executor.Executor: Executor killed task 1.0 in stage 0.0 (TID 1)
15/02/19 20:58:58 ERROR scheduler.TaskSchedulerImpl: Exception in statusUpdate
我可以做些什么来更快地清理所有 RDD 资源吗? unpersist()
在这里没有帮助。我在上下文停止记录之前看到它的日志。但无论如何我会看到下一个任务日志。
无法更快地恢复。一旦任务开始,它将自行完成或失败。阶段失败或取消不会中断正在进行的任务。
我觉得原因基本上是threads cannot be forcefully killed in Java。如果这是一个问题,您可以选择更多分区。较小的任务完成得更快。