1

私はh1-highmem-16マシンを使用してそれぞれ104 GBのメモリを持つDataprocジョブを実行しています。Google Dataprocインスタンスで使用可能なすべてのメモリを使用していないYARN

私はGoogleコンソールのインスタンスのサイズを再確認しました。すべてのワーカーとマスターは実際にh1-highmem-16です。

はそれにもかかわらず、私はこのエラーを取得する:YARNメモリのすべての104ギガバイトを

Container killed by YARN for exceeding memory limits. 56.8 GB of 54 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead. 

使用されていないのはなぜ?

答えて

4

Dataprocはマシンごとに2つのSparkエグゼキュータに適合するようにメモリ設定を構成するため、各コンテナは各NodeManagerの容量の半分になるはずです。

場合によっては、それぞれのマシンにエグゼキュータをどのようにパックするかを変更するために、spark.executor.coresとともにspark.executor.memoryと、おそらくはspark.yarn.executor.memoryOverheadを上書きすることができます。 spark.executor.coresは、マシンのコアの半分が各エグゼキュータに与えられるので、マシンのコアの半分にデフォルト設定されます。あなたの場合、これは、各Sparkエグゼキュータが同じプロセスで8つのタスクを並行して実行しようとしていることを意味します。

executorコアを減らして他のすべてを同じに保つことで、タスク全体のメモリを効果的に増やすことができます。たとえば、spark.executor.cores=6は、他のすべてを同じにしてもタスクごとのメモリを33%増加させます。これらはジョブ提出時に指定することができます:

gcloud dataproc jobs submit spark --properties spark.executor.cores=6 
+0

働いているコアの数を減らして、ありがとう。私はエグゼキュータのメモリとメモリのオーバーヘッドを何の成功もせずに変更しようとしましたが、常に限界を超えて数ギガバイトを使用していました。 – cahen

関連する問題