web-dev-qa-db-ja.com

Spark YARNリソースマネージャー:YARNコンテナーとSpark Executors

私はYARNのSparkに不慣れで、YARNContainersとSpark Executorsの関係を理解し​​ていません。ベースで次の構成を試しました。 yarn-utils.pyスクリプトの結果で、最適なクラスター構成を見つけるために使用できます。

私が取り組んでいるHadoopクラスター(HDP 2.4):

  • 1つのマスターノード:
    • CPU:それぞれ6コアの2つのCPU = 12コア
    • RAM:64 GB
    • SSD:2 x 512 GB
  • 5つのスレーブノード:
    • CPU:それぞれ6コアの2つのCPU = 12コア
    • RAM:64 GB
    • HDD:4 x 3 TB = 12 TB
  • HBaseがインストールされています(これは、以下のスクリプトのパラメーターの1つです)

そこで、python yarn-utils.py -c 12 -m 64 -d 4 -k True(c = cores、m = memory、d = hdds、k = hbase-installed)を実行すると、次の結果が得られました。

 Using cores=12 memory=64GB disks=4 hbase=True
 Profile: cores=12 memory=49152MB reserved=16GB usableMem=48GB disks=4
 Num Container=8
 Container Ram=6144MB
 Used Ram=48GB
 Unused Ram=16GB
 yarn.scheduler.minimum-allocation-mb=6144
 yarn.scheduler.maximum-allocation-mb=49152
 yarn.nodemanager.resource.memory-mb=49152
 mapreduce.map.memory.mb=6144
 mapreduce.map.Java.opts=-Xmx4915m
 mapreduce.reduce.memory.mb=6144
 mapreduce.reduce.Java.opts=-Xmx4915m
 yarn.app.mapreduce.am.resource.mb=6144
 yarn.app.mapreduce.am.command-opts=-Xmx4915m
 mapreduce.task.io.sort.mb=2457

これらの設定は、Ambariインターフェイスを介して行い、クラスターを再起動しました。値も、以前に手動で計算した値とほぼ一致します。

私は今問題を抱えています

  • spark-submitスクリプトの最適な設定を見つける
    • パラメータ--num-executors--executor-cores--executor-memory
  • yARNコンテナとSpark executors)の間の関係を取得します
  • 私のSpark履歴UIのハードウェア情報を理解する(設定時に表示されるメモリが少ない(ワーカーノードの量を掛けて全体のメモリに計算した場合))
  • yARNのvcoresの概念を理解するために、ここではまだ有用な例を見つけることができませんでした

しかし、私はこの投稿を見つけました YARNのコンテナとは何ですか? 、しかし、エグゼキュータとの関係を説明していないため、これは実際には役に立ちませんでした。

誰かが1つ以上の質問を解決するのを手伝ってもらえますか?

14
D. Müller

私はここで私の洞察を段階的に報告します:

  • 最初に重要なことはこの事実です(出典: このClouderaドキュメント ):

    YARNでSparkを実行すると、各SparkエグゼキューターはYARNコンテナーとして実行されます。[...]

  • これは、コンテナーの数が常にSparkアプリケーションによって作成されたエグゼキューターと同じになることを意味します(例:spark-submitの--num-executorsパラメーターを介して)。

  • yarn.scheduler.minimum-allocation-mbによって設定され、すべてのコンテナは常に少なくともこの量のメモリを割り当てます。これは、パラメータ--executor-memoryがたとえばに設定されている場合を意味します。 1gのみですが、yarn.scheduler.minimum-allocation-mbは例です。 6g、コンテナはSparkアプリケーションで必要とされるよりもはるかに大きいです。

  • 逆に、パラメータ--executor-memoryyarn.scheduler.minimum-allocation-mb値よりも高い値に設定されている場合。 12g、コンテナはより多くのメモリを動的に割り当てますが、のみ要求されたメモリ量がyarn.scheduler.maximum-allocation-mb値以下の場合。

  • yarn.nodemanager.resource.memory-mbの値は、合計でどれだけのメモリを割り当てることができるかを決定します1つのホストのすべてのコンテナ

=>したがって、yarn.scheduler.minimum-allocation-mbを設定すると、より小さなコンテナを実行できます。小規模なエグゼキュータの場合(そうでなければメモリの浪費になります)。

=>yarn.scheduler.maximum-allocation-mbを最大値(たとえば、yarn.nodemanager.resource.memory-mbに等しい)に設定すると、より大きなエグゼキュータを定義できます(必要に応じて、たとえば--executor-memoryによってより多くのメモリが割り当てられます)。パラメータ)。

26
D. Müller