5つのノードを持つHadoopクラスターがあり、各ノードには32GBのメモリを備えた12のコアがあります。 MapReduceフレームワークとしてYARNを使用しているので、YARNには次の設定があります。
次に、YARNクラスターページ( http:// myhost:8088/cluster/apps )に表示されるクラスターメトリックは、 VCores合計 です 40。これはかなり大丈夫です!
次に、その上にSparkをインストールし、yarn-clientモードでspark-Shellを使用します。
次の構成で1つのSparkジョブを実行しました:
設定しました --executor-cores なので 10、 --num-executors なので 4、論理的には、完全にあるはずです 使用される40のVcore。ただし、Sparkジョブの実行が開始された後、同じYARNクラスターページを確認すると、 使用される4つのVcore、および 合計4つのVcore
私も見つけましたcapacity-scheduler.xml
にパラメータがあります--yarn.scheduler.capacity.resource-calculator
と呼ばれます:
「スケジューラ内のリソースを比較するために使用されるResourceCalculator実装。デフォルト、つまりDefaultResourceCalculatorはメモリのみを使用し、DominantResourceCalculatorはドミナントリソースを使用してメモリ、CPUなどの多次元リソースを比較します。」
次に、その値をDominantResourceCalculator
に変更しました。
しかし、YARNを再起動して同じSparkアプリケーションを実行しても、同じ結果が得られました。クラスターメトリックは、使用されているVCoreが4であることを示しています。CPUとメモリの使用量も確認しました。 htopコマンドを使用する各ノードで、10個のCPUコアすべてが完全に占有されているノードはないことがわかりました。理由は何でしょうか。
また、同じSparkジョブを、たとえば--num executors 40 --executor-cores 1
を使用して、きめ細かく実行しようとしました。この方法で、各ワーカーノードとすべてのCPUコアのCPUステータスを再度確認しました。完全に占有されています。
私は同じことを考えていましたが、リソース計算機を変更することは私のために働きました。
これが私がプロパティを設定する方法です:
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.Apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
アプリケーションのYARNUIで、割り当てられているコンテナーとvcoreの数を確認します。変更すると、コンテナーの数はexecutors + 1になり、vcoreは(executor-cores * num-executors)+1になります。
エグゼキュータテイク1各コア、2コアアプリケーションマスター = 42要求されたコア4 vCoresの合計がある場合。
エグゼキュータコアを8に減らし、それぞれを再起動してくださいNodeManager
また、yarn-site.xmlを変更し、次のプロパティを設定します。
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores
YARNスケジューラーをFairSchedulerに設定しなくても、同じことがわかりました。 Spark UIは適切な数のタスクを示しましたが、何も問題がなかったことを示しています。私のクラスターはほぼ100%のCPU使用率を示し、これを確認しました。
FairSchedulerを設定した後、YARNリソースは正しく見えました。