yarn-site.xml
の設定をいじくり回しても、つまり以下のすべてのオプションを使用します
yarn.scheduler.minimum-allocation-vcores
yarn.nodemanager.resource.memory-mb
yarn.nodemanager.resource.cpu-vcores
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.maximum-allocation-vcores
Sparkクラスタのすべてのコアを利用するために、まだアプリケーションを取得できません。sparkエグゼキュータは、利用可能なすべてのメモリを正しく使用しているようです。しかし、各エグゼキューターは単一のコアのみを取得し続け、それ以上は実行しません。
spark-defaults.conf
で設定されたオプションは次のとおりです
spark.executor.cores 3
spark.executor.memory 5100m
spark.yarn.executor.memoryOverhead 800
spark.driver.memory 2g
spark.yarn.driver.memoryOverhead 400
spark.executor.instances 28
spark.reducer.maxMbInFlight 120
spark.shuffle.file.buffer.kb 200
spark.executor.cores
は3に設定されていますが、機能しないことに注意してください。どうすれば修正できますか?
問題はyarn-site.xml
またはspark-defaults.conf
にあるのではなく、実際にはコアをエグゼキューターに割り当てるか、MapReduceジョブの場合はMappers/Reducersに割り当てるリソース計算機にあります。
デフォルトのリソース計算機、つまりorg.Apache.hadoop.yarn.util.resource.DefaultResourceCalculator
は、コンテナの割り当てにメモリ情報のみを使用し、CPUスケジューリングはデフォルトでは有効になっていません。メモリとCPUの両方を使用するには、org.Apache.hadoop.yarn.util.resource.DominantResourceCalculator
ファイルでリソース計算機をcapacity-scheduler.xml
に変更する必要があります。
変更する必要があるのは次のとおりです。
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.Apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
同様の種類の問題があり、コードからspark.executor.cores as 5
を設定していました。デフォルトのコアである1をとっただけの場合でも。 spark UIと環境タブでは、5つのコアが表示されていました。しかし、executorsタブを確認していると、1つのプロセスが実行されているだけです[〜#〜] running [ 〜#〜]エグゼキュータに対する状態。spark version 1.6.を使用していました。
それで、私はspark-submitコマンドを--conf spark.executor.cores=5
としてヒットしようとしましたが、これは5コアを使用するのと同じようにうまく機能しています
あるいは単に
--executor-cores 5
も機能します。