web-dev-qa-db-ja.com

Spark-コンテナが物理メモリの制限を超えて実行されています

2つのワーカーノードのクラスターがあります。 Worker_Node_1-64GB RAM Worker_Node_2-32GB RAM

Background Summery:ヤーンクラスターでspark-submitを実行して、グラフ上でPregelを実行し、1つのソース頂点から他のすべての頂点までの最短パス距離を計算し、値をコンソールに出力しようとしています。実験:

  1. 15の頂点を持つ小さなグラフの場合、実行はアプリケーションの最終ステータスを完了します:成功
  2. 私のコードは完全に機能し、ソース頂点として単一の頂点の241頂点グラフの最短距離を出力しますが、問題があります。

Problem:ログファイルを掘り下げると、タスクが完了します成功 4分26秒で終了しますが、ターミナルでは、アプリケーションのステータスを実行中と約12分後に、タスクの実行が停止します-

Application application_1447669815913_0002 failed 2 times due to AM Container for appattempt_1447669815913_0002_000002 exited with exitCode: -104 For more detailed output, check application tracking page:http://myserver.com:8088/proxy/application_1447669815913_0002/
Then, click on links to logs of each attempt. 
Diagnostics: Container [pid=47384,containerID=container_1447669815913_0002_02_000001] is running beyond physical memory limits. Current usage: 17.9 GB of 17.5 GB physical memory used; 18.7 GB of 36.8 GB virtual memory used. Killing container.

Dump of the process-tree for container_1447669815913_0002_02_000001 : 
 |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 47387 47384 47384 47384 (Java) 100525 13746 20105633792 4682973 /usr/lib/jvm/Java-7-Oracle-cloudera/bin/Java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp -Dspark.eventLog.enabled=true -Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory -Dspark.executor.memory=14g -Dspark.shuffle.service.enabled=false -Dspark.yarn.executor.memoryOverhead=2048 -Dspark.yarn.historyServer.address=http://myserver.com:18088 -Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.shuffle.service.port=7337 -Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-Assembly.jar -Dspark.serializer=org.Apache.spark.serializer.KryoSerializer -Dspark.authenticate=false -Dspark.app.name=com.path.PathFinder -Dspark.master=yarn-cluster -Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.Apache.spark.deploy.yarn.ApplicationMaster --class com.path.PathFinder --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg /home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile --executor-memory 14336m --executor-cores 32 --num-executors 2
|- 47384 47382 47384 47384 (bash) 2 0 17379328 853 /bin/bash -c LD_LIBRARY_PATH=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native::/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native /usr/lib/jvm/Java-7-Oracle-cloudera/bin/Java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp '-Dspark.eventLog.enabled=true' '-Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory' '-Dspark.executor.memory=14g' '-Dspark.shuffle.service.enabled=false' '-Dspark.yarn.executor.memoryOverhead=2048' '-Dspark.yarn.historyServer.address=http://myserver.com:18088' '-Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.shuffle.service.port=7337' '-Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-Assembly.jar' '-Dspark.serializer=org.Apache.spark.serializer.KryoSerializer' '-Dspark.authenticate=false' '-Dspark.app.name=com.path.PathFinder' '-Dspark.master=yarn-cluster' '-Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.Apache.spark.deploy.yarn.ApplicationMaster --class 'com.path.PathFinder' --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg '/home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile' --executor-memory 14336m --executor-cores 32 --num-executors 2 1> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stdout 2> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stderr
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Failing this attempt. Failing the application.

私が試したもの:

  1. yarn.schedular.maximum-allocation-mb – 32GB
  2. mapreduce.map.memory.mb = 2048(以前は1024でした)
  3. さまざまな--driver-memoryを最大24gまで試しました

大きいサイズのグラフ(> 300Kの頂点)も処理できるように、リソースマネージャーを構成する方法をさらに詳しく説明してもらえますか?ありがとう。

14
aditya

spark.yarn.executor.memoryOverheadのオフヒープメモリを表すために、私の場合はエラーを回避します。ドライバーメモリとエグゼキューターメモリの量を増やすときは、これを忘れないでください。構成アイテム

2
Gavin Gu

処理するデータが多いほど、各Sparkタスクで必要なメモリが多くなります。そして、executorが実行しているタスクが多すぎると、メモリ不足になる可能性があります。大量の処理で問題が発生した場合データの数は、通常、エグゼキューターあたりのコア数のバランスが適切に取れていないことが原因です。コアの数を減らすか、エグゼキューターのメモリを増やしてみてください。

メモリの問題があることを確認する簡単な方法の1つは、Spark UIの[Executor]タブを確認することです。ガベージコレクションの時間が長いことを示す多くの赤いバーが表示されている場合は、おそらく不足していますあなたのエグゼキューターのメモリの。

2
Ted

spark.driver.memoryのデフォルト設定を512mから2gに増やすだけで、私の場合はこのエラーを解決できます。

同じエラーが繰り返し発生する場合は、メモリをより高い値に設定できます。次に、同じエラーが発生するまでそれを減らし続けて、ジョブに使用する最適なドライバーメモリを知ることができます。

2
Wong Tat Yau

Sparkジョブは、MapReduceジョブとは異なる方法でリソースマネージャーにリソースを要求します。各エグゼキューターに割り当てられたエグゼキューターとmem/vcoreの数を調整してみてください。フォロー http://spark.Apache.org/docs/latest/submitting-applications.html

0
Kai

同様の問題があります:

主なエラー情報:

  • exitCode:-104
  • 'PHYSICAL'メモリ制限
Application application_1577148289818_10686 failed 2 times due to AM Container for appattempt_1577148289818_10686_000002 exited with **exitCode: -104**

Failing this attempt.Diagnostics: [2019-12-26 09:13:54.392]Container [pid=18968,containerID=container_e96_1577148289818_10686_02_000001] is running 132722688B beyond the **'PHYSICAL' memory limit**. Current usage: 1.6 GB of 1.5 GB physical memory used; 4.6 GB of 3.1 GB virtual memory used. Killing container.

spark.executor.memoryspark.executor.memoryOverheadの両方を増やしても効果はありませんでした。

次に、spark.driver.memoryを増やして解決しました。

0
Mithril