0

私は、さまざまなスパークストリーミングジョブ用に複数のdataprocクラスタを実行しています。すべてのクラスタは単一ノードとして構成されています。Google dataproc sparkジョブで「ジョブの実行中にノードが再起動されました」が失敗します。メッセージ

最近(cca 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日間稼動していたアプリケーションの場合、これはスパークコードを変更せずに開始されました。

すべてのクラスタは、ヨーロッパ - 西1-dゾーン、グローバル領域にあります。 すべてのアプリケーションはscalaで書かれています。

誰かが似たような経験をしていますか?どんな助けも歓迎されるでしょう。

答えて

0

これは数日間かなり持続的であると言われているので、入力データに関する何かが変更されたかどうか、そして失敗が開始される前に100%

Compute Engine VMはスワップパーティションを構成しないため、RAMが不足するとすべてのデーモンがクラッシュして再起動します。

、これを確認するVMへのSSHおよび実行するには:

sudo journalctl -u google-dataproc-agent

をどこかの出力では、JVMがクラッシュヘッダでなければなりません。 hadoop-hdfs-namenodeのような他のHadoopデーモンに対してもこれを繰り返すことができます。彼らはほぼ同じ時間にクラッシュするはずです。

クラスタでstackdriver monitoring [1]を有効にして、時間の経過とともにRAM使用率を取得することをお勧めします。理論が検証されている場合は、使用しているマシンタイプのhighmemバリアントか、同じCPUを使用し、RAMを増やしたカスタムVM [2]に切り替えることができます。

さらに、ジョブがチェックポイントでSpark Streamingを使用する(または変換できる)場合、Dataproc Restartable Jobs [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] How to restart Spark Streaming job from checkpoint on Dataproc?

+0

感謝を! google-dataproc-agentログを見ると、実際にJavaがメモリ不足になっていることが確認されました。私はそれをもっと徹底的に監視して見ようとします。スパークのアプリケーションで何らかのメモリリークが発生するかもしれません。stackdriverモニタリングに関しては、私はすでにそれを使用していますが、RAMの使用状況の監視をサポートしていないか、何かが欠けているようです。 –

+0

ありがとうございます。 RAMの使用状況が報告されない理由を見ていきます。 – tix

+0

また、イメージバージョン1.1.34を使用して失敗しているすべてのクラスタが認識されましたが、バージョン1.1.29を使用している古いクラスタも1つあり、60日間以上問題なく動作しています。その間、私のクラスタは引き続き失敗し、処理中のデータの量にかかわらず、cca 3および半日の実行後に定期的に発生します。 –

1

これは、画像のバージョン1.1.34のバグに関連しています。画像1.1.29にダウングレードし、問題を修正しました。画像1.1.29使用--imageバージョン1.1.29

でクラスタを作成するための

は、より多くの情報のためhttps://groups.google.com/forum/#!topic/cloud-dataproc-discuss/H5Dy2vmGZ8Iを参照してください:

関連する問題