2017-03-27 16 views
4

私は次の問題の解決策をたくさん探してきました。 Scala 2.11.8とSpark 2.1.0を使用しています。物理的な限界を超えて走っているスパークコンテナ

Application application_1489191400413_3294 failed 1 times due to AM Container for appattempt_1489191400413_3294_000001 exited with exitCode: -104 
For more detailed output, check application tracking page:http://ip-172-31-17-35.us-west-2.compute.internal:8088/cluster/app/application_1489191400413_3294Then, click on links to logs of each attempt. 
Diagnostics: Container [pid=23372,containerID=container_1489191400413_3294_01_000001] is running beyond physical memory limits. 
Current usage: 1.4 GB of 1.4 GB physical memory used; 3.5 GB of 6.9 GB virtual memory used. Killing container. 

私はここでエラーで報告されている1.4 GBよりも多くを割り当てられました注意してください。私はエグゼクティブの誰もが失敗しているのを見ていないので、このエラーからの私の読書は、ドライバーがより多くの記憶を必要とすることであった。しかし、私の設定は伝播していないようです。

次のように私は、糸にジョブパラメータを設定しています:

additionalSparkConfSettingsでパラメータをプロビジョニングメモリは次のスニペットで設定された
val conf = new SparkConf() 
    .setAppName(jobName) 
    .set("spark.hadoop.mapred.output.committer.class", "com.company.path.DirectOutputCommitter") 
additionalSparkConfSettings.foreach { case (key, value) => conf.set(key, value) } 

// this is the implicit that we pass around 
implicit val sparkSession = SparkSession 
    .builder() 
    .appName(jobName) 
    .config(conf) 
    .getOrCreate() 

HashMap[String, String](
    "spark.driver.memory" -> "8g", 
    "spark.executor.memory" -> "8g", 
    "spark.executor.cores" -> "5", 
    "spark.driver.cores" -> "2", 
    "spark.yarn.maxAppAttempts" -> "1", 
    "spark.yarn.driver.memoryOverhead" -> "8192", 
    "spark.yarn.executor.memoryOverhead" -> "2048" 
) 

私の設定は、実際に伝播しませんか?あるいは、私はログを誤解していますか?

ありがとうございます!

+0

私は 'spark.yarn.driver.memoryOverhead'を10240に変更しましたが、上記のエラーと同じエラーでジョブが失敗しました。しかし、 'spark.driver.memory'を数GBで更新したところ、成功しました。 'memoryOverhead' configsが実際に動作しないようです。 – Navneet

+0

この問題は解決しましたか? – ilcord

答えて

0

私の場合の問題はシンプルで簡単なものでした。

コード内のドライバレベルのパラメータをコード内で設定することはできません。それまでにはすでに明らかに遅すぎて設定が無視されるためです。私は数ヶ月前にそれを解決したときにいくつかのテストでこれを確認しました。

ただし、実行パラメータはコードで設定できます。ただし、別の場所で同じパラメーターを設定すると、パラメーター優先プロトコルを念頭に置いてください。

0

オーバーヘッドメモリは、エグゼキュータとドライバの両方に設定する必要があり、ドライバとエグゼキュータのメモリの一部である必要があります。

spark.yarn.executor.memoryOverhead = executorMemory * 0.10, with minimum of 384 

エグゼキュータごとに割り当てられる(メガバイト単位)をオフヒープメモリの量。これは、VMオーバーヘッド、 内部文字列、その他のネイティブオーバーヘッドなどを考慮したメモリです。これは、 のエクゼキュータサイズ(通常6-10%)で増加する傾向があります。

spark.yarn.driver.memoryOverhead = driverMemory * 0.10, with minimum of 384. 

クラスタモードで ドライバごとに割り当てられる(メガバイト単位)をオフヒープメモリの量。これは、 VMオーバーヘッド、インターネット文字列、その他のネイティブオーバーヘッドなどを考慮したメモリです。この は、コンテナサイズ(通常6〜10%)で成長する傾向があります。

メモリの最適化の詳細については、Memory Management Overview

はまたSO Container is running beyond memory limits

乾杯の次のスレッドを参照して参照してください!

関連する問題