web-dev-qa-db-ja.com

vcoreがYARNのSpark)のノード数と常に等しいのはなぜですか?

5つのノードを持つHadoopクラスターがあり、各ノードには32GBのメモリを備えた12のコアがあります。 MapReduceフレームワークとしてYARNを使用しているので、YARNには次の設定があります。

  • 糸.nodemanager.resource.cpu-vcores = 10
  • 糸.nodemanager.resource.memory-mb = 26100

次に、YARNクラスターページ( http:// myhost:8088/cluster/apps )に表示されるクラスターメトリックは、 VCores合計 です 40。これはかなり大丈夫です!

次に、その上にSparkをインストールし、yarn-clientモードでspark-Shellを使用します。

次の構成で1つのSparkジョブを実行しました:

  • -ドライバー-メモリー20480m
  • --executor-memory 20000m
  • --num-executors 4
  • --executor-cores 10
  • --conf spark.yarn.am.cores = 2
  • --conf spark.yarn.executor.memoryOverhead = 5600

設定しました --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ステータスを再度確認しました。完全に占有されています。

20
Rui

私は同じことを考えていましたが、リソース計算機を変更することは私のために働きました。
これが私がプロパティを設定する方法です:

    <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

エグゼキュータテイク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
1
Artur Sukhenko

YARNスケジューラーをFairSchedulerに設定しなくても、同じことがわかりました。 Spark UIは適切な数のタスクを示しましたが、何も問題がなかったことを示しています。私のクラスターはほぼ100%のCPU使用率を示し、これを確認しました。

FairSchedulerを設定した後、YARNリソースは正しく見えました。

0
Def_Os