1

我正在使用 Dataproc 在使用 spark-shell 的集群上运行 Spark 命令。我经常收到错误/警告消息,表明我与执行者失去了联系。消息如下所示:

[Stage 6:>                                                          (0 + 2) / 2]16/01/20 10:10:24 ERROR     org.apache.spark.scheduler.cluster.YarnScheduler: Lost executor 5 on spark-cluster-femibyte-w-0.c.gcebook-1039.internal: remote Rpc client disassociated
16/01/20 10:10:24 WARN akka.remote.ReliableDeliverySupervisor:  Association with remote system [akka.tcp://sparkExecutor@spark-cluster-  femibyte-w-0.c.gcebook-1039.internal:60599] has failed, address is now gated for [5000] ms. Reason: [Disassociated] 
16/01/20 10:10:24 WARN org.apache.spark.scheduler.TaskSetManager: Lost task 0.2 in stage 6.0 (TID 17, spark-cluster-femibyte-w-0.c.gcebook-1039.internal): ExecutorLostFailure (executor 5 lost)
16/01/20 10:10:24 WARN org.apache.spark.scheduler.TaskSetManager: Lost task 1.2 in stage 6.0 (TID 16, spark-cluster-femibyte-w-0.c.gcebook-1039.internal): ExecutorLostFailure (executor 5 lost)

...

这是另一个示例:

20 10:51:43 ERROR org.apache.spark.scheduler.cluster.YarnScheduler: Lost executor 2 on spark-cluster-femibyte-w-1.c.gcebook-1039.internal: remote Rpc client disassociated
16/01/20 10:51:43 WARN akka.remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkExecutor@spark-cluster-femibyte-w-1.c.gcebook-1039.internal:58745] has failed, address is now gated for [5000] ms. Reason: [Disassociated] 
16/01/20 10:51:43 WARN org.apache.spark.scheduler.TaskSetManager: Lost task 1.0 in stage 4.0 (TID 5, spark-cluster-femibyte-w-1.c.gcebook-1039.internal): ExecutorLostFailure (executor 2 lost)
16/01/20 10:51:43 WARN org.apache.spark.scheduler.TaskSetManager: Lost task 0.0 in stage 4.0 (TID 4, spark-cluster-femibyte-w-1.c.gcebook-1039.internal): ExecutorLostFailure (executor 2 lost)
16/01/20 10:51:43 WARN org.apache.spark.ExecutorAllocationManager:  Attempted to mark unknown executor 2 idle

这是正常的吗?我能做些什么来防止这种情况发生吗?

4

1 回答 1

4

如果作业本身没有失败,那么您没有看到与实际任务失败相关的其他传播错误(至少据我从问题中发布的内容来看),您很可能只是看到无害但已知是核心 Spark 中的垃圾邮件问题;这里的关键是 Spark 动态分配在作业期间放弃未充分利用的执行程序,并根据需要重新分配它们。他们最初未能抑制执行者丢失的部分,但我们已经测试以确保它对实际工作没有不良影响。

这是一个 googlegroups 线程,重点介绍了 Spark on YARN 的一些行为细节。

要检查是否确实是动态分配导致消息,请尝试运行:

spark-shell --conf spark.dynamicAllocation.enabled=false \
    --conf spark.executor.instances=99999

或者,如果您通过 提交作业gcloud beta dataproc jobs,则:

gcloud beta dataproc jobs submit spark \
    --properties spark.dynamicAllocation.enabled=false,spark.executor.instances=99999

如果您确实看到网络中断或其他 Dataproc 错误在它不是应用程序端 OOM 或其他东西时解除主/工作器的关联,您可以直接通过 dataproc-feedback@google.com 向 Dataproc 团队发送电子邮件;beta 不会成为潜在的破坏行为的借口(当然,我们希望清除在 beta 期间我们可能尚未发现的棘手的边缘情况错误)。

于 2016-01-20T17:28:13.410 回答