0

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.

Antwort

0

Da Sie sagen, dass dies in den letzten Tagen ziemlich hartnäckig ist, frage ich mich, ob sich etwas über Ihre Eingabedaten geändert hat und wenn Sie fast 100% Auslastung vor dem Beginn der Fehler ausgeführt haben.

Da Compute Engine-VMs keine Swap-Partition konfigurieren, werden alle Daemons abstürzen und neu gestartet, wenn der RAM nicht mehr ausreicht.

dies, SSH in die VM Um zu überprüfen, und führen Sie:

sudo journalctl -u google-dataproc-agent

Irgendwo in der Ausgabe sollte JVM Crash-Header sein. Sie können dies auch für andere Hadoop-Daemons wie hadoop-hdfs-namenode wiederholen. Sie sollten ungefähr zur gleichen Zeit abstürzen.

Ich empfehle, die Stackdriver-Überwachung [1] auf dem Cluster zu aktivieren, um die RAM-Nutzung im Laufe der Zeit zu erhalten. Wenn meine Theorie validiert ist, können Sie versuchen, entweder zu einer highmem Variante des von Ihnen verwendeten Maschinentyps oder zu einer benutzerdefinierten VM [2] mit gleichen CPUs, aber mehr RAM zu wechseln.

Wenn Ihre Jobs Spark Streaming mit Checkpointing verwenden (oder in dieses konvertiert werden können), sollten Sie Dataproc-Neustartaufträge berücksichtigen [3]. Nach einem solchen Absturz wird Dataproc den Job automatisch für Sie neu starten [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] How to restart Spark Streaming job from checkpoint on Dataproc?

+0

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. –

+0

Danke, dass du das gemacht hast. Wir untersuchen, warum die RAM-Nutzung nicht gemeldet wird. – tix

+0

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. –

Verwandte Themen