すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:YARN スケジューラ

最終更新日:Jan 28, 2025

このトピックでは、YARN スケジューラについて説明します。

概要

ResourceManager は、Hadoop YARN のコアコンポーネントです。 ResourceManager コンポーネントを使用して、クラスタリソースを管理およびスケジュールできます。スケジューラは、ResourceManager コンポーネントの中核です。スケジューラを使用して、クラスタリソースを管理し、アプリケーションにリソースを割り当てることができます。スケジューラは、クラスタリソースの使用率を最大化し、ホットスポットの問題などの問題がアプリケーションに影響を与えるのを防ぐために、クラスタのリソースレイアウトを最適化します。スケジューラはまた、クラスタ上で実行される多様なアプリケーションを調整し、マルチテナントの公平性やアプリケーションの優先順位などのポリシーに基づいてリソース競合の問題を解決します。スケジューラは、ノードの依存関係と配置ポリシーに関して、特定のアプリケーションの要件を満たすことができます。

YARN スケジューラはプラガブルなプラグインです。 YARN は、次のタイプのスケジューラを提供します。FIFO(First-In-First-Out)スケジューラ、Fair スケジューラ、および Capacity スケジューラ。

  • FIFO スケジューラは最もシンプルなスケジューラです。複数のテナントにアプリケーションをスケジューリング用にサブミットすることはできません。これは、すべてのアプリケーションがクラスタリソースの割り当てなしに、スケジューリングのためにデフォルトキューにサブミットされることを示しています。この場合、アプリケーションは、他の制御やスケジューリング構成なしで、FIFO ポリシーに基づいてスケジュールされます。 FIFO スケジューラは単純なシナリオにのみ適しており、本番環境ではほとんど使用されません。

  • Fair スケジューラは、Cloudera Distributed Hadoop(CDH)で使用されるデフォルトのスケジューラです。 CDH が Hortonworks Data Platform(HDP)とマージされた後、Cloudera Data Platform(CDP)が誕生し、Fair スケジューラの代わりに Capacity スケジューラを使用するようになりました。 Apache Hadoop を使用している場合は、Capacity スケジューラも推奨されます。 Fair スケジューラは、マルチテナント管理とリソーススケジューリング機能を提供します。機能には、マルチレベルキュー管理、クォータ管理、アクセス制御リスト(ACL)ベースの制御、リソースの共有、テナント間の公平なスケジューリング、テナント内でのアプリケーションのスケジューリング、リソースの予約とプリエンプション、非同期スケジューリングが含まれます。ただし、Fair スケジューラの開発は、Apache Hadoop の Capacity スケジューラの開発ほど最新ではありません。 Fair スケジューラは、クラスタのリソースレイアウトを考慮せず、ノードラベル、ノード属性、配置制約などのスケジューリング機能をサポートしていません。

  • Capacity スケジューラは、Apache Hadoop、HDP、および CDP で使用されるデフォルトのスケジューラです。 Capacity スケジューラは、Fair スケジューラのすべての機能を含む、完全なマルチテナント管理とリソーススケジューリング機能を提供します。 Capacity スケジューラは、グローバルスケジューリングに基づいてクラスタのリソースレイアウトを最適化し、ホットスポットの問題のリスクを軽減し、クラスタリソースの使用率を最大化できます。 Capacity スケジューラは、ノードラベル、ノード属性、配置制約などのスケジューリング機能もサポートしています。

E-MapReduce(EMR)YARN には、Capacity スケジューラを使用することをお勧めします。次のセクションでは、Capacity スケジューラについて詳しく説明します。他のスケジューラの詳細については、Apache Hadoop YARN が提供するドキュメントをご参照ください。

アーキテクチャとコアプロセス

Capacity スケジューラの MainScheduler は、次のいずれかの方法を使用してトリガーできます。

  • ノードのハートビート駆動型: Capacity スケジューラがノードのハートビートを受信すると、MainScheduler がトリガーされ、ノードに対してスケジュールできるアプリケーションが選択されます。このタイプのスケジューリングは、ノードのローカルスケジューリングです。 MainScheduler はハートビート間隔の影響を受け、ランダムスケジューリングに似ています。その結果、リソースが不足していてスケジューリング要件が満たされていないために、多数のノードがヒットしない可能性があります。これにより、スケジューリング効率が低下します。この方法は、スケジューリングパフォーマンスとスケジューリング機能に高い要件がないクラスタに適しています。

  • 非同期スケジューリング: MainScheduler は、非同期スレッドまたは複数の並列スレッドによってトリガーされます。ノードリストからランダムなノードがスケジューリングのために選択されます。これにより、スケジューリングパフォーマンスが向上します。この方法は、スケジューリングパフォーマンスに高い要件があるが、スケジューリング機能に低い要件があるクラスタに適しています。

  • グローバルスケジューリング: MainScheduler はグローバルスレッドによってトリガーされます。このタイプのスケジューリングは、アプリケーションのグローバルスケジューリングです。アプリケーションは、マルチテナントの公平性やアプリケーションの優先順位などの要因に基づいてスケジューリングのために選択されます。次に、ノードは、リソースサイズ、スケジューリング要件、アプリケーションのリソース配布などの要因に基づいてスケジューリングのために選択されます。このようにして、最適なスケジューリングの決定を行うことができます。この方法は、スケジューリングパフォーマンスとスケジューリング機能に高い要件があるクラスタに適しています。

次の図は、YARN 3.2 以降に基づくグローバルスケジューリングのアーキテクチャを示しています。2

  • MainScheduler は、リソースリクエストに基づく非同期マルチスレッド処理フレームワークです。 MainScheduler には、割り当てスレッドとサブミットスレッドが含まれています。 1 つ以上の割り当てスレッドを使用して、最も優先順位の高いリソースリクエストを見つけ、リソースサイズと配置制約に基づいて適切な候補ノードを選択し、割り当て提案を生成し、中間キューに割り当て提案を配置します。サブミットスレッドは、割り当て提案を使用し、さまざまな配置制約を再確認してから、割り当て提案をサブミットまたは拒否するために使用されます。サブミットスレッドを使用して、Capacity スケジューラのステータスを更新することもできます。

  • ReScheduler は、定期的に実行される動的リソース監視フレームワークです。 ReScheduler には、キュー間プリエンプション、キュー内プリエンプション、予約リソースプリエンプションなどに関連する複数のリソース監視ポリシーが含まれています。

  • ノードソートマネージャと配置制約マネージャは、MainScheduler のグローバルスケジューリングプラグインです。プラグインは、負荷分散と複雑な配置制約の管理に使用されます。

次の図は、Capacity スケジューラのグローバルスケジューリングプロセスを示しています。3

  • MainScheduler のコンテナ割り当てプロセス:

    1. パーティション(ノードラベル)を選択します。クラスタには、1 つ以上のパーティションが存在する場合があります。 MainScheduler は、パーティションにコンテナを順番に割り当てます。

    2. リーフキューを選択します。 MainScheduler は、ルートキューからキューを走査します。同じレベルの子キューは、リーフキューが見つかるまで、キューに割り当てられた保証リソースの割合の昇順で走査されます。前の図では、赤いキューはリソース使用率が高いことを示し、緑のキューはリソース使用率が低いことを示しています。リソースは優先的に緑のキューに割り当てられます。

    3. アプリケーションを選択します。 MainScheduler は、fair ポリシーまたは FIFO ポリシーに基づいてキュー内のアプリケーションを選択します。 fair ポリシーが使用されている場合、アプリケーションは、アプリケーションに割り当てられたメモリリソースの量の昇順で選択されます。 FIFO ポリシーが使用されている場合、アプリケーションは優先順位の降順、アプリケーション ID の昇順で選択されます。

    4. リクエストを選択します。 MainScheduler は、優先順位に基づいてリクエストを選択します。

    5. ソートされた候補ノードを選択します。 MainScheduler は、リクエストの配置制約に基づいて、ソートされたすべてのノードから特定のリソース要件を満たす候補ノードを検索します。

    6. 候補ノードを走査し、各候補ノードにコンテナを割り当てます。割り当てプロセス中に、MainScheduler は、キューまたはノードの割り当て済み、使用済み、または未確認のリソースを確認します。チェックに合格すると、割り当て提案が生成され、提案キューに入れられます。

  • MainScheduler のコンテナサブミットプロセス: サブミットスレッドは、提案キューの割り当て提案を確認します。この場合、サブミットスレッドは、アプリケーション、ノード、および配置制約の要件が満たされているかどうかを確認します。要件が満たされていない場合、割り当て提案は破棄されます。要件が満たされている場合、割り当てられたコンテナが有効になり、アプリケーションまたはノードのリソースが更新されます。

  • ReScheduler のリソースプリエンプションプロセス: クラスタの使用可能リソースの合計量が特定のリソースしきい値未満であり、特定のアプリケーションに割り当てられたリソースが不足している場合、ReScheduler はさまざまな方法を使用してリソースプリエンプションをトリガーする可能性があります。

    • キュー間プリエンプション: YARN では、キューの未使用の保証リソースを他のキューで共有できます。保証リソースが不足しているキュー内のアプリケーションがより多くのリソースを必要とするが、クラスタにアイドルリソースがない場合、キュー間プリエンプションがトリガーされます。キュー容量内のリソースは保証リソースであり、キュー容量を超えているが最大キュー容量未満のリソースは共有リソースです。

    • キュー内プリエンプション: ReScheduler は、キューの FIFO または fair ポリシーに基づいて、アプリケーションのリソースを監視および調整します。優先順位の高いアプリケーションがリソースを必要とするが、キューに割り当てられたリソースが使い果たされた場合、キュー内プリエンプションがトリガーされます。

    • 予約リソースプリエンプション: タスクが特定の条件を満たすと、タスクとタスク用に予約されているリソースが解放されます。たとえば、タイムアウト期間内にタスクにリソースが割り当てられない場合、タスクとタスク用に予約されているリソースが解放されます。

機能

Capacity スケジューラは、次の機能を提供します。

  • マルチレベルキュー管理: Capacity スケジューラを使用すると、複数のテナントで複数レベルのキューを管理できます。親キューのリソースクォータは、すべての子キューのリソース使用量を制限し、単一の子キューのリソースクォータは親キューのリソースクォータを超えることはできません。これにより、制御可能なマルチテナント管理が保証され、さまざまな複雑なアプリケーションシナリオの要件が満たされます。

  • リソースクォータ: Capacity スケジューラを使用すると、キューに保証されているリソースと、キューで使用できるリソースの最大量を構成できます。また、キューで実行できるアプリケーションの最大数、ApplicationMaster が使用できるリソースの最大数、ユーザーが使用するリソースと構成済みリソースの比率も構成できます。このようにして、アプリケーション、タスクタイプ、ユーザーなど、複数のディメンションからキューを制御できます。

  • 弾性リソースの共有: キュー内の弾性リソースの量は、次の式を使用して計算できます。最大キュー容量 - キュー容量。クラスタと親キューにアイドルリソースがある場合、子キューは他のキューの未使用の保証リソースを使用できます。これにより、異なるキューのリソースのスケジュールベースの再利用が保証され、クラスタのリソース使用率が向上します。

  • ACL ベースの制御: Capacity スケジューラを使用すると、キューの権限を管理できます。複数のユーザーを指定してタスクをサブミットおよび管理したり、同じユーザーを指定して複数のキューを管理したりできます。

  • テナント間キュースケジューリング: 同じレベルのキューは、キューの保証リソースの割合の昇順でスケジュールされます。これにより、保証リソースが少なく必要なキューが最初にスケジュールされます。キューの優先順位を構成する場合、同じレベルのキューは 2 つのグループに分けられます。使用リソースが保証リソース以下であるキューと、使用リソースが保証リソースを超えているキューです。リソースは、最初に使用リソースが保証リソース以下であるキューに割り当てられます。次に、2 つのグループのすべてのキューが優先順位の降順、保証リソースの割合の昇順でソートされます。

  • テナント内アプリケーションスケジューリング: テナント内のアプリケーションは、FIFO または fair ポリシーに基づいてスケジュールされます。アプリケーションが FIFO ポリシーに基づいてスケジュールされている場合、テナント内のすべてのアプリケーションは、優先順位の降順、サブミット時間の昇順でスケジュールされます。アプリケーションが fair ポリシーに基づいてスケジュールされている場合、テナント内のすべてのアプリケーションは、アプリケーションによって使用されるリソースの割合の昇順、サブミット時間の昇順でスケジュールされます。

  • プリエンプション: クラスタのリソースは常に変化しています。弾性リソースの共有、テナント内キューの公平なスケジューリング、テナント間アプリケーションスケジューリングの要件を満たすために、プリエンプションプロセスを使用して、キューとアプリケーションのリソース使用量のバランスを取ります。

構成と使用上の注意

グローバル構成

構成ファイル

設定項目

推奨値

説明

yarn-site.xml

yarn.resourcemanager.scheduler.class

空のまま

スケジューラクラス。デフォルト値: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler。デフォルト値は CapacityScheduler を示します。

capacity-scheduler.xml

yarn.scheduler.capacity.maximum-applications

空のまま

クラスタで実行できる同時アプリケーションの最大数。デフォルト値: 10000。

yarn.scheduler.capacity.global-queue-max-application

空のまま

キューで実行できる同時アプリケーションの最大数。このパラメータを構成しない場合、クラスタで同時に実行できるアプリケーションは、比例してキューに割り当てられます。各キューで同時に実行できるアプリケーションの最大数は、次の式を使用して計算されます。キュー容量 / クラスタリソース× ${yarn.scheduler.capacity.maximum-applications}。特別な要件を持つ複数のキューが存在する場合は、ビジネス要件に基づいてこのパラメータを構成します。たとえば、容量の小さいキューで多数のアプリケーションを実行する場合は、ビジネス要件に基づいてこのパラメータの値を変更できます。

yarn.scheduler.capacity.maximum-am-resource-percent

0.25

キュー内のすべてのアプリケーションの Application Master(AM)が使用できるリソースの最大量の割合。最大リソース量は、次の式を使用して計算されたリソース量を超えることはできません。このパラメータの値×最大キュー容量。デフォルト値: 0.1。キューに多数の小さなアプリケーションがある場合、AM コンテナの割合が高くなり、キューで実行できるアプリケーションの数が制限されます。ビジネス要件に基づいて、このパラメータの値を増やすことができます。

yarn.scheduler.capacity.resource-calculator

org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

キュー、ノード、およびアプリケーションに必要な計算リソースを計算するために使用される電卓。このパラメータをデフォルト値 org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator に設定すると、キュー、ノード、およびアプリケーションに必要なメモリリソースのみが計算されます。このパラメータを org.apache.hadoop.yarn.util.resource.DominantResourceCalculator に設定することもできます。これは、メモリ、CPU、その他のリソースなど、構成されているすべてのタイプのリソースが計算されることを示します。最も使用されているリソースがプライマリリソースと見なされます。

説明

この設定項目の変更は、ResourceManager を再起動するか、HA が有効になっている場合はプライマリノードとセカンダリノード間でスイッチオーバーを実行した後に有効になります。更新操作では、設定項目の変更を有効にすることができません。

yarn.scheduler.capacity.node-locality-delay

-1

ノードのスケジューリングが遅延される回数。デフォルト値は 40 です。このパラメータは、Hadoop スケジューリングがローカル記憶域に大きく依存しているシナリオで使用されます。これは、計算に必要なデータが存在するノードにタスクが割り当てられることを示します。ネットワークとストレージの発達に伴い、ディスクとネットワークはもはや主要なボトルネックではなくなりました。したがって、ローカライズの問題を考慮する必要はありません。スケジューリングパフォーマンスを向上させるために、このパラメータを -1 に設定することをお勧めします。

ノード構成

ノードハートビートモード

構成ファイル

設定項目

推奨値

説明

capacity-scheduler.xml

yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled

false

一度に複数のコンテナをハートビートで割り当てるかどうかを指定します。デフォルト値は true です。このパラメータを true に設定すると、クラスタの負荷分散に影響を与え、ホットスポットの問題が発生する可能性があります。このパラメータを true に設定しないことをお勧めします。

yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments

空のまま

ハートビートで割り当てることができるコンテナの最大数。デフォルト値: 100。このパラメータは、yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled パラメータを true に設定した場合にのみ有効になります。

yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments

空のまま

ハートビートで割り当てることができるオフスイッチコンテナの最大数。このパラメータは、yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled パラメータを true に設定した場合にのみ有効になります。

非同期スケジューリング

構成ファイル

設定項目

推奨値

説明

capacity-scheduler.xml

yarn.scheduler.capacity.schedule-asynchronously.enable

true

非同期スケジューリングを有効にするかどうかを指定します。デフォルト値は false です。スケジューリングパフォーマンスを向上させるために、このパラメータを true に設定することをお勧めします。

yarn.scheduler.capacity.schedule-asynchronously.maximum-threads

1 または空のまま

非同期スケジューリングに割り当てることができるスレッドの最大数。デフォルト値は 1 です。複数のスレッドは、多数の重複する提案を生成する可能性があります。ほとんどの場合、単一のスレッドが割り当てられている場合、スケジューリングパフォーマンスは高くなります。このパラメータを構成しないことをお勧めします。

yarn.scheduler.capacity.schedule-asynchronously.maximum-pending-backlogs

空のまま

非同期スケジューリングのためにキューにサブミットされる割り当て提案の最大数。デフォルト値は 100 です。クラスタサイズが大きい場合は、ビジネス要件に基づいてこのパラメータの値を増やすことができます。

グローバルスケジューリング

説明

非同期スケジューリングに関連するすべての設定項目は、グローバルスケジューリングに必要であり、次の表には記載されていません。

構成ファイル

設定項目

推奨値

説明

capacity-scheduler.xml

yarn.scheduler.capacity.multi-node-placement-enabled

true

グローバルスケジューリングを有効にするかどうかを指定します。デフォルト値は false です。スケジューリングパフォーマンスとスケジューリング機能に高い要件があるクラスタに対して、グローバルスケジューリングを有効にすることができます。

yarn.scheduler.capacity.multi-node-sorting.policy

default

デフォルトのグローバルスケジューリングポリシーの名前。

yarn.scheduler.capacity.multi-node-sorting.policy.names

default

グローバルスケジューリングポリシーの名前。複数の名前はコンマ(,)で区切ります。

yarn.scheduler.capacity.multi-node-sorting.policy.default.class

org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicy

ノードに割り当てられたリソースの絶対値の昇順でノードをソートするために使用される、デフォルトのグローバルスケジューリングポリシーの一意の実装クラス。

yarn.scheduler.capacity.multi-node-sorting.policy.default.sorting-interval.ms

  • 0(小規模クラスタ)

  • 1000(1000 ノードを超えるクラスタ)

デフォルトのグローバルスケジューリングポリシーに基づいてキャッシュが更新される間隔。

クラスタサイズに基づいて、ノードキャッシングを有効にするかどうかを決定できます。

  • 1000 ノードを超える大規模クラスタの場合、ノードキャッシングを有効にしてスケジューリングパフォーマンスを向上させ、更新間隔を 1 秒に設定できます。

    説明

    ノードキャッシングを有効にすると、多数のコンテナが上位にランク付けされたノードに割り当てられる可能性があります。したがって、影響を十分に理解し、ノードキャッシングを有効にする前にテストを実行する必要があります。

  • 小規模クラスタの場合、パラメータ値を 0 に設定して、スケジューリングパフォーマンスに影響を与えることなく、スケジューリング効率を確保できます。

デフォルト値: 1000。この設定項目の値は 0 以上である必要があります。値 0 は、同期ソートが実装されていることを示します。大規模クラスタの場合、同期ソートはパフォーマンスに大きな影響を与えます。)

ノードパーティション構成

詳細については、「ノードラベル」をご参照ください。

基本的なキュー構成

基本的なキュー構成には、キューの階層関係、キューの容量、キューの最大容量の構成が含まれます。 YARN クラスタが企業の複数の部門とチームで共有されている場合、特定の組織モードと予想されるリソースの割合に基づいて YARN キューを編成できます。次の図に示すように、親キュー root には、dev、test、support、default の 4 つの子キューがあります。キューの保証リソースの割合は 50%、30%、10%、100% であり、キューの最大リソース量の割合は 100%、50%、30%、100% です。 dev キューには、training と services の 2 つの子キューがあります。子キューの保証リソースの割合は 40% と 60% であり、子キューの最大リソース量の割合はどちらも 100% です。

次の表に、キューの基本的な構成を示します。

構成ファイル

設定項目

サンプル値

説明

capacity-scheduler.xml

yarn.scheduler.capacity.root.queues

dev,test,support,default

ルートキューの子キュー。複数のキューはコンマ(,)で区切ります。

yarn.scheduler.capacity.root.dev.capacity

50

dev キューのクラスタリソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.dev.maximum-capacity

100

dev キューのクラスタリソースに対する最大リソース量の割合。

yarn.scheduler.capacity.root.dev.queues

training,services

dev キューの子キュー。

yarn.scheduler.capacity.root.dev.training.capacity

40

training キューの dev キューの保証リソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.dev.training.maximum-capacity

100

training キューの dev キューの最大リソース量に対する最大リソース量の割合。

yarn.scheduler.capacity.root.dev.services.capacity

60

services キューの dev キューの保証リソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.dev.services.maximum-capacity

100

services キューの dev キューの最大リソース量に対する最大リソース量の割合。

yarn.scheduler.capacity.root.test.capacity

30

test キューのクラスタリソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.test.maximum-capacity

50

test キューのクラスタリソースに対する最大リソース量の割合。

yarn.scheduler.capacity.root.support.capacity

10

support キューのクラスタリソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.support.maximum-capacity

30

support キューのクラスタリソースに対する最大リソース量の割合。

yarn.scheduler.capacity.root.default.capacity

10

default キューのクラスタリソースに対する保証リソースの割合。

yarn.scheduler.capacity.root.default.maximum-capacity

100

default キューのクラスタリソースに対する最大リソース量の割合。

[YARN スケジューラ] ページのリストには、キューの階層、保証リソースの割合、キューの最大リソース量の割合が表示されます。次の図では、塗りつぶされた灰色のボックスは各キューの最大リソース量の割合を表し、破線のボックスはクラスタリソースに対する各キューの保証リソースの割合を表します。キューを展開して、次の図に示すように、キューのステータス、リソース情報、アプリケーション情報、その他の構成などのキューの詳細を表示できます。5

高度なキュー構成

構成ファイル

設定項目

推奨値

説明

capacity-scheduler.xml

yarn.scheduler.capacity.<queue_path>.ordering-policy

fair

キュー内のアプリケーションをスケジュールするために使用されるポリシーを指定します。キュー内のアプリケーションは、FIFO または fair ポリシーに基づいてスケジュールされます。アプリケーションが FIFO ポリシーに基づいてスケジュールされている場合、キュー内のすべてのアプリケーションは、優先順位の降順、サブミット時間の昇順でスケジュールされます。アプリケーションが fair ポリシーに基づいてスケジュールされている場合、キュー内のすべてのアプリケーションは、アプリケーションによって使用されるリソースの割合の昇順、サブミット時間の昇順でスケジュールされます。デフォルト値は fifo です。ほとんどの場合、このパラメータを fair に設定することをお勧めします。

yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight

空のまま

重みベースの fair スケジューリングポリシーを有効にするかどうかを指定します。アプリケーションに割り当てられたリソースに基づいて、fair スケジューリングポリシーを有効にするかどうかを決定できます。デフォルト値は false です。値 false は、アプリケーションがアプリケーションの使用済みリソース量の昇順でスケジュールされることを示します。値 true は、アプリケーションが次の式を使用して計算されたリソースの昇順でスケジュールされることを示します。使用済みリソース / 必要なリソース。これは、リソース競合中に大規模なアプリケーションがリソース不足になるのを防ぐのに役立ちます。

yarn.scheduler.capacity.<queue_path>.state

空のまま

キューのステータス。デフォルト値は RUNNING です。ほとんどの場合、このパラメータを構成する必要はありません。キューを削除する必要がある場合にのみ、パラメータを STOPPED に設定できます。キューのステータスを STOPPED に変更し、キュー内のすべてのアプリケーションが完了すると、キューは削除されます。

yarn.scheduler.capacity.<queue_path>.maximum-am-resource-percent

空のまま

キュー内のすべてのアプリケーションの Application Master が使用できるリソースの最大量の割合。最大リソース量は、次の式を使用して計算されたリソース量を超えることはできません。このパラメータの値×最大キュー容量。デフォルト値は、yarn.scheduler.capacity.maximum-am-resource-percent パラメータのデフォルト値と同じです。

yarn.scheduler.capacity.<queue_path>.user-limit-factor

空のまま

単一ユーザーの上限係数。ユーザーが使用できるリソースの最大量は、次の式を使用して計算されます。min(最大キューリソース、保証キューリソース× userLimitFactor の値)。デフォルト値: 1.0。

yarn.scheduler.capacity.<queue_path>.minimum-user-limit-percent

空のまま

単一のユーザーが保証キューリソースに使用できるリソースの最小割合。ユーザーが使用できるリソースの最小量は、次の式を使用して計算されます。max(保証キューリソース / ユーザー数、保証キューリソース× userLimitFactor の最小値 / 100)。デフォルト値: 100。

yarn.scheduler.capacity.<queue_path>.maximum-applications

空のまま

キューで実行できるアプリケーションの最大数。このパラメータを構成しない場合、次の式を使用して計算された値が使用されます。キューの保証リソースの割合× yarn.scheduler.capacity.maximum-applications パラメータの値。

yarn.scheduler.capacity.<queue_path>.acl_submit_applications

空のまま

アプリケーションサブミット ACL。キューに対してこのパラメータを構成しない場合、キューは親キューの構成を継承します。デフォルトでは、ルートキューではすべてのユーザーがキューにアプリケーションをサブミットできます。

yarn.scheduler.capacity.<queue_path>.acl_administer_queue

空のまま

キュー管理 ACL。キューに対してこのパラメータを構成しない場合、キューは親キューの構成を継承します。デフォルトでは、ルートキューではすべてのユーザーがキューを管理できます。

キューの ACL 構成

次の表に、キューの ACL 構成を示します。ほとんどの場合、ACL を無効にすることができます。ビジネス要件に基づいて ACL を有効にすることができます。

構成ファイル

設定項目

推奨値

説明

yarn-site.xml

yarn.acl.enabled

空のまま

ACL を有効にするかどうかを指定します。デフォルト値: false。

capacity-scheduler.xml

yarn.scheduler.capacity.<queue_path>.acl_submit_applications

空のまま

アプリケーションサブミット ACL。キューに対してこのパラメータを構成しない場合、キューは親キューの構成を継承します。デフォルトでは、ルートキューではすべてのユーザーがキューにアプリケーションをサブミットできます。

yarn.scheduler.capacity.<queue_path>.acl_administer_queue

空のまま

キュー管理 ACL。キューに対してこのパラメータを構成しない場合、キューは親キューの構成を継承します。デフォルトでは、ルートキューではすべてのユーザーがキューを管理できます。

説明
  • 親キューの ACL 構成は、すべての子キューに有効です。たとえば、root の default キューでは、Hadoop ユーザーのみがジョブをサブミットできます。ただし、root キューではすべてのユーザーがキューをサブミットおよび管理できるため、他のユーザーも root の default キューにアプリケーションをサブミットできます。子キューの ACL 機能を使用するには、yarn.scheduler.capacity.root.acl_submit_applications=<space> パラメータと yarn.scheduler.capacity.root.acl_administer_queue=<space> パラメータを構成する必要があります。

  • ユーザーグループまたはユーザーにアプリケーションをサブミットおよび転送するための ACL 権限を付与するには、yarn.scheduler.capacity.<queue_path>.acl_submit_applications パラメータと yarn.scheduler.capacity.<queue_path>.acl_administer_queue パラメータを構成する必要があります。

プリエンプション構成

プリエンプションは、複数のテナント間でのキュースケジューリングの公平性とアプリケーションの優先順位を確保するために使用されます。スケジューリング要件が高いクラスタの場合、プリエンプションを有効にすることができます。 YARN V2.8.0 以降は、プリエンプション機能をサポートしています。次の表に、関連する構成を示します。

構成ファイル

設定項目

推奨値

説明

yarn-site.xml

yarn.resourcemanager.scheduler.monitor.enable

true

プリエンプションを有効にするかどうかを指定します。

capacity-scheduler.xml

yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled

true

キュー内リソースプリエンプションを有効にするかどうかを指定します。デフォルトでは、キュー間リソースプリエンプションは有効になっており、無効にすることはできません。

yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy

priority_first

キュー内リソースプリエンプションが実行されるポリシー。デフォルト値: userlimit_first。

yarn.scheduler.capacity.<queue-path>.disable_preemption

true

キューのプリエンプションを許可するかどうかを指定します。デフォルトでは、このパラメータを構成しない場合、親キューの構成が使用されます。たとえば、ルートキューに対してこのパラメータを true に設定すると、すべての子キューをプリエンプションすることはできません。ルートキューに対してこのパラメータを構成しない場合、デフォルト値は false です。これは、キューをプリエンプションできることを示します。

yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption

true

キュー内プリエンプションを無効にするかどうかを指定します。デフォルトでは、このパラメータを構成しない場合、親キューの構成が使用されます。たとえば、ルートキューに対してこのパラメータを true に設定すると、すべての子キューでキュー内プリエンプションが無効になります。

RESTful API を使用した capacity-scheduler.xml の構成

以前のバージョンの YARN では、RefreshQueues 操作を呼び出すことによってのみ capacity-scheduler.xml ファイルを管理できました。 RefreshQueues 操作が呼び出されるたびに、capacity-scheduler.xml ファイルの完全な構成が更新されますが、更新された設定項目を取得することはできません。 YARN V3.2.0 以降では、RESTful API を呼び出して増分データ更新を実行し、capacity-scheduler.xml ファイルで有効になっているすべての構成を表示できます。これにより、キューの管理効率が大幅に向上します。

Capacity スケジューラを有効にするには、次の表に示す設定項目を構成します。

構成ファイル

設定項目

推奨値

説明

yarn-site.xml

yarn.scheduler.configuration.store.class

fs

ストレージのタイプ。

yarn.scheduler.configuration.max.version

100

ファイルシステムに保存できる構成ファイルの最大数。構成ファイルの数がこのパラメータの値を超えると、超過した構成ファイルは自動的に削除されます。

yarn.scheduler.configuration.fs.path

/yarn/<クラスタ名>/scheduler/conf

capacity-scheduler.xml ファイルが保存されるパス。パスが存在しない場合、システムはパスを作成します。プレフィックスが指定されていない場合、デフォルトのファイルシステムの相対パスがストレージパスとして使用されます。

重要

<クラスタ名> を特定のクラスタ名に置き換えます。 YARN サービスがデプロイされている複数のクラスタで、同じ分散ストレージを使用できます。

  • capacity-scheduler.xml ファイルを表示するメソッド:

    • RESTful API: 次の形式の URL にアクセスします。http://<rm-address>/ws/v1/cluster/scheduler-conf。

    • HDFS: 構成パス ${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp> にアクセスして、capacity-scheduler.xml ファイルの構成を表示します。 <timestamp> は、capacity-scheduler.xml ファイルが生成された時刻を示します。タイムスタンプ値が最大の capacity-scheduler.xml ファイルが最新の構成ファイルです。

  • 設定項目を更新する方法の例:

    yarn.scheduler.capacity.maximum-am-resource-percent パラメータの値を 0.2 に変更し、yarn.scheduler.capacity.xxx パラメータを削除できます。パラメータを削除するには、パラメータの値フィールドを削除するだけです。

    curl -X PUT -H "Content-type: application/json" 'http://<rm-address>/ws/v1/cluster/scheduler-conf' -d '
    {
      "global-updates": [
        {
          "entry": [{
            "key":"yarn.scheduler.capacity.maximum-am-resource-percent",
            "value":"0.2"
          },{
            "key":"yarn.scheduler.capacity.xxx"
          }]
        }
      ]
    }'

単一のタスクまたはコンテナのリソース制限

単一のタスクまたはコンテナのリソース制限は、次の表に示す設定項目によって決まります。

構成ファイル

設定項目

説明

デフォルト値 / ルール

yarn-site.xml

yarn.scheduler.maximum-allocation-mb

クラスタレベルでスケジュールできる最大メモリリソース。単位: MiB。

メモリサイズが最大のコアまたはタスクノードグループの使用可能メモリリソース。ノードグループのメモリサイズは、クラスタの作成時に指定されます。値は、メモリサイズが最大のノードグループの yarn.nodemanager.resource.memory-mb パラメータの値と同じです。

yarn.scheduler.maximum-allocation-vcores

クラスタレベルでスケジュールできる最大 CPU リソース。単位: VCore。

デフォルト値は 32 です。

capacity-scheduler.xml

yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb

指定されたキューに対してスケジュールできる最大メモリリソース。単位: MiB。

デフォルトでは、このパラメータは空のままです。このパラメータを構成すると、システムはクラスタレベルの設定をオーバーライドします。このパラメータは、指定されたキューに対してのみ有効です。

yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores

指定されたキューに対してスケジュールできる最大 CPU リソース。単位: VCore。

デフォルトでは、このパラメータは空のままです。このパラメータを構成すると、システムはクラスタレベルの設定をオーバーライドします。このパラメータは、指定されたキューに対してのみ有効です。

リクエストされたリソースが単一のタスクまたはコンテナで使用可能な最大リソースを超える場合、アプリケーションログに次のエラーが記録されます。InvalidResourceRequestException: Invalid resource request…