2016-07-17 7 views
0

私は3つのm4.2xlargeインスタンス(1つのマスターと2つのコアノード)でEMRでスパークコードを実行しようとしています。デフォルト以外のspark.executor.memory設定が有効でないEMRのpysparkコード?

各マシンには32GBのメモリがあります。私は、このエラーに実行し続ける:

16/07/17 23:32:35 WARN TaskSetManager: Lost task 5.0 in stage 3.0 (TID 41, ip-172-31-55-189.ec2.internal): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead. 

メモリを後押しするために、私はSparkContextを作成する前に、私のスパークのコードで以下のconfの設定を使用しています。

conf.set('spark.executor.instances', 2) 
conf.set('spark.executor.cores', 2) 
conf.set('spark.executor.memory', '12g') 
conf.set('spark.yarn.driver.memoryOverhead', '0.2') 
sc = SparkContext(conf=conf) 

ただし、エグゼキュータごとにメモリが増えても効果がないことを示す同じエラーが表示されます。私が間違ってやっていることと、各コアインスタンス上の2つのタスクの間で32GBのメモリを分割する方法は何ですか?

答えて

1

実際にはspark.executor.memoryが正常に設定されています。スパークが記憶メモリを計算する方法はおおよそ.54 * spark.executor.memoryで、あなたのケースでは約5.5gです。

C.F.、this

はまた、spark.yarn.executor.memoryOverheadのためのあなたの値が間違っているようです。これはmb単位の数字なので、0.2はあまり意味がありません。

+1

「分数」の設定が違うようです。これは他のいくつかのオプションでは '8g'タイプの文字列ではなく数値でもあります。 APIに奇妙な不一致があります。私がそれを数値8192の値に変更したとき、物事はうまくいった。 – Gopala

関連する問題