Ich führe mehrere dataproc-Cluster für verschiedene Spark-Streaming-Jobs. Alle Cluster sind als einzelner Knoten konfiguriert.Fehler bei Google Dataproc-Spark-Jobs, bei denen "Knoten beim Ausführen eines Jobs neu gestartet wurde". Nachricht
Vor kurzem (vor ca. 10 Tagen) habe ich Jobausfälle in allen Clustern erlebt. Jeder Job läuft für ca. 3 Tage dann nicht mit der gleichen Botschaft:
=========== 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 ========
Dies ist auch das allerletzte, was die in Protokollen zu sehen sind. Dies begann ohne Änderungen im Spark-Code für Anwendungen, die zuvor für mehr als 50 Tage ohne Probleme ausgeführt wurden.
Alle Cluster sind in der Europa-West-1-Zone, globale Region. Alle Anwendungen sind in Scala geschrieben.
Wer hat etwas ähnliches erlebt? Jede Hilfe wäre willkommen.
Dank! Ein Blick auf das Google-Dataproc-Agent-Protokoll bestätigte tatsächlich, dass Java nicht genügend Arbeitsspeicher hatte. Ich werde versuchen, es zu überwachen und genauer hinzuschauen, vielleicht ist es eine Art Speicherleck in der Funkenanwendung.Wie bei der Stackdriver-Überwachung verwende ich es bereits, aber es scheint, dass es die Überwachung der RAM-Nutzung nicht unterstützt, oder mir etwas fehlt. –
Danke, dass du das gemacht hast. Wir untersuchen, warum die RAM-Nutzung nicht gemeldet wird. – tix
Ich habe auch gerade festgestellt, dass alle Cluster, die nicht Bildversion 1.1.34 verwenden, aber ich habe auch einen älteren Cluster, der Version 1.1.29 verwendet, und dass man für 60+ Tage ohne Probleme läuft. In der Zwischenzeit schlagen meine Cluster weiterhin fehl, und das passiert regelmäßig nach etwa dreieinhalb Tagen, unabhängig von der Menge der Daten, die sie verarbeiten. –