我正在运行多个dataproc集群,用于各种spark流式处理作业。所有集群都配置为单个节点。
最近(10天前)我开始在所有集群上体验工作失败。每个作业运行约3天,然后失败并显示相同的消息:
=========== Cloud Dataproc Agent Error ===========
com.google.cloud.hadoop.services.agent.AgentException: Node was restarted while executing a job. This could be user-initiated or caused by Compute Engine maintenance event. (TASK_FAILED)
at com.google.cloud.hadoop.services.agent.AgentException$Builder.build(AgentException.java:83)
at com.google.cloud.hadoop.services.agent.job.AbstractJobHandler.lambda$kill$0(AbstractJobHandler.java:211)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:211)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:200)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:130)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:435)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:900)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:634)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractFuture$TrustedFuture.addListener(AbstractFuture.java:98)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.AbstractTransformFuture.create(AbstractTransformFuture.java:50)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.Futures.transformAsync(Futures.java:551)
at com.google.cloud.hadoop.services.agent.job.AbstractJobHandler.kill(AbstractJobHandler.java:202)
at com.google.cloud.hadoop.services.agent.job.JobManagerImpl.recoverAndKill(JobManagerImpl.java:145)
at com.google.cloud.hadoop.services.agent.MasterRequestReceiver$NormalWorkReceiver.receivedJob(MasterRequestReceiver.java:142)
at com.google.cloud.hadoop.services.agent.MasterRequestReceiver.pollForJobsAndTasks(MasterRequestReceiver.java:106)
at com.google.cloud.hadoop.services.agent.MasterRequestReceiver.pollForWork(MasterRequestReceiver.java:78)
at com.google.cloud.hadoop.services.agent.MasterRequestReceiver.lambda$doStart$0(MasterRequestReceiver.java:68)
at com.google.cloud.hadoop.services.repackaged.com.google.common.util.concurrent.MoreExecutors$ScheduledListeningDecorator$NeverSuccessfulListenableFutureTask.run(MoreExecutors.java:623)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
======== End of Cloud Dataproc Agent Error ========
这也是在日志中看到的最后一件事。对于以前运行了50多天没有问题的应用程序,这种情况在spark代码没有任何更改的情况下开始发生。
所有集群都位于全球区域的欧洲-西方1-d区。所有应用程序都是用scala编写的。
有人经历过类似的事情吗?欢迎任何帮助。
2条答案
按热度按时间ijxebb2r1#
既然你说这在过去几天是相当持久的,我想知道你的输入数据是否有什么变化,在失败开始之前你的利用率是否接近100%。
由于计算引擎vm没有配置交换分区,当ram用完时,所有守护进程都将崩溃并重新启动。
要检查这一点,请将ssh连接到vm并运行:
sudo journalctl -u google-dataproc-agent
输出中的某个地方应该是jvm崩溃头。您还可以对其他hadoop守护进程(如hadoop-hdfs-namenode
. 它们应该在大致相同的时间坠毁。我建议在集群上启用stackdriver监控[1],以获得随时间变化的ram使用情况。如果我的理论被证实,你可以试着换成
highmem
您正在使用的机器类型的变体或具有相同CPU但更多ram的自定义vm[2]。此外,如果您的作业使用带有检查点的spark流(或者可以转换为检查点),那么请考虑dataproc可重启作业[3]。在这样的崩溃之后,dataproc将自动为您重新启动作业[4]。
[1] https://cloud.google.com/dataproc/docs/concepts/stackdriver-monitoring
[2] https://cloud.google.com/dataproc/docs/concepts/custom-machine-types
[3] https://cloud.google.com/dataproc/docs/concepts/restartable-jobs
[4] 如何从dataproc上的检查点重新启动spark流作业?
ajsxfq5m2#
这与映像版本1.1.34中的错误有关。降级到图1.1.29,这就解决了问题。
要使用映像1.1.29创建集群,请使用--image version 1.1.29
参考https://groups.google.com/forum/#!topic/cloud dataproc discuse/h5dy2vmgz8i了解更多信息: