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

E-MapReduce:ノードラベル機能を使用してパーティションに基づいてノードを管理する

最終更新日:Feb 14, 2025

ノードラベル機能を使用すると、YARN で実行するようにジョブがスケジュールされている場合、YARN は物理層で異なるタイプのジョブを分離できます。このトピックでは、ビジネスの種類とノードの種類に基づいてノードラベルを追加する方法について説明します。

背景情報

YARN は、リソースの管理とジョブのスケジュールに使用できるキューとノードラベルを提供します。キューとノードラベルは異なる役割を担い、クラスタ内のリソース管理において独自の役割を果たします。

  • キューは論理リソースの割り当てに使用されます。 キューを使用すると、事前に設定された比率に基づいて、クラスタの計算リソースを異なるユーザーグループまたはアプリケーションに割り当てることができます。 これにより、共有クラスタ環境でリソースが異なるチームまたは異なるタイプのワークロードに均等に割り当てられます。

  • ノードラベルを使用して、クラスタ内の特定のノードをマークし、ラベルに基づいてきめ細かくリソースを割り当てることができます。 ノードラベルは、GPU やメモリサイズなどのハードウェアに対する特定の要件を持つアプリケーション、たとえば GPU とメモリサイズに高い要件を持つアプリケーションにとって重要です。

キューはリソースの割り当てとジョブのスケジュールに使用され、ノードラベルはノードのグループ化とジョブの分離に使用されます。 キューとノードラベルを一緒に使用することで、柔軟かつ効率的にリソースを管理し、ジョブをスケジュールできます。

ノードラベルを使用して、ビジネス要件とクラスタの状態に基づいてノードをグループ化できます。 これにより、クラスタリソースを効率的に管理およびスケジュールできます。 ノードラベルを追加して、データ同期ジョブ、バッチジョブ、リアルタイムジョブなど、さまざまなタイプのジョブをグループ化できます。 また、ノードラベルを追加して、CPU 最適化、メモリ最適化、GPU コンピューティング最適化インスタンスファミリに属するインスタンスなど、さまざまなタイプのインスタンスをグループ化することもできます。

前提条件

  • YARN サービスを含む E-MapReduce(EMR)クラスタが作成されていること。 詳細については、「クラスタを作成する」をご参照ください。

  • YARN に Capacity Scheduler が使用されていること。 ノードラベル機能をサポートしているのは Capacity Scheduler のみです。

背景情報

ある企業では、warehouse と analysis という名前の 2 つの子キューと、batch と streaming という名前の 2 つのパーティションが必要です。 warehouse キューは、バッチジョブの処理に 60% のリソースを、ストリーミングジョブの処理に 70% のリソースを必要とします。 analysis キューは、バッチジョブの処理に 30% のリソースを、ストリーミングジョブの処理に 20% のリソースを必要とします。 YARN のデフォルトパーティションは DEFAULT_PARTITION です。 このパーティションは、warehouse キューに 60% のリソースを、analysis キューに 30% のリソースを割り当て、残りの 10% のリソースを他のビジネス要件のために予約します。 詳細については、次の図を参照してください。

この例では、キューとノードラベルを一緒に使用して、リソースを柔軟に管理し、オフラインジョブを他のジョブから物理的に分離します。 これにより、他のジョブのパフォーマンスと安定性が影響を受けないようにします。 この例では、EMR V5.16.0 の DataLake クラスタを使用します。 他のバージョンの他のタイプの EMR クラスタのキューとノードラベルを使用したリソース管理の手順は、基本的に EMR V5.16.0 の DataLake クラスタの場合と同じです。

手順 1:リソースキューを編集する

  1. EMR コンソール にログインします。[EMR on ECS] ページで、目的のクラスタを見つけ、[アクション] 列の [サービス] をクリックします。[サービス] タブで、アクション[YARN] をクリックします。

  2. [YARN] サービスページで、[リソースキューの編集] タブをクリックします。 タブで、[キューの管理] をクリックします。

  3. [子キューの管理] ダイアログボックスで、[キューの追加] をクリックして、warehouse と analysis という名前の 2 つのキューを追加します。

    • warehouse、analysis、default キューの [キュー容量] 列に、それぞれ 60、30、10 と入力します。 次に、[ステータス] 列のキューのドロップダウンリストから [開始] を選択します。

      image

    • 次の図は構成を示しています。

      image

  4. [まだ有効ではありません] をクリックします。 [有効にする構成] ダイアログボックスで、[アクション] 列の [refresh_queues] をクリックします。

    image

手順 2:パーティションを追加し、ノードをパーティションに関連付ける

  1. [パーティション] タブをクリックします。 タブで、[パーティションの追加] をクリックして、streaming という名前のパーティションを追加します。

    • [パーティションの追加] ダイアログボックスで、[パーティション名][パーティションタイプ][関連付けられたノードグループ] パラメータを構成します。

      image

      パーティション名:streaming と入力します。

      パーティションタイプ:ドロップダウンリストから [排他的] を選択します。 これは、パーティションが完全に一致する場合にのみ、コンテナを排他的パーティションのノードに割り当てることができることを示します。

      関連付けられたノードグループ:パーティションに関連付けるノードグループを選択します。 この例では、emr-task-3 が選択されています。 emr-task-3 ノードグループには、大量の中間データを保存し、低レイテンシを必要とするリアルタイムジョブの実行に適したメモリ最適化インスタンスが含まれています。 ビジネス要件とインスタンスタイプに基づいて、ノードグループをパーティションに関連付けることができます。

  2. 前述の操作を繰り返して、batch という名前のパーティションを追加します。

    image

  3. [まだ有効ではありません] をクリックします。 [有効にする構成] ダイアログボックスで、[アクション] 列の [refresh_labels] をクリックします。

    image

  4. 構成が有効になったら、[合計リソース] 列で各パーティションの合計リソースを確認します。

    image

手順 3:パーティションとキューの関連付け管理を有効にする

  1. [リソースキューの編集] タブで、[パーティションの選択] ドロップダウンリストから batch パーティションと streaming パーティションを順番に選択し、[パーティションとキューの関連付け管理を有効にする] をオンにします。

  2. [パーティションとキューの関連付け管理を有効にする] ダイアログボックスで、[キュー容量] 列に各パーティションのキュー容量を指定し、[OK] をクリックします。

    • バッチ: [キュー容量] 列で、分析キューに 30[60] をウェアハウスキューに、10 をデフォルトキューに入力します。

    • ストリーミング: [キュー容量] 列で、分析キューに 20、ウェアハウスキューに 70、デフォルトキューに 10 と入力します。

    image

    説明

    この例では、すべてのキューに各パーティションで実行する権限があります。 特定のパーティションで特定のキューによって送信されたジョブのみを実行する場合は、キューの容量を 0 に指定できます。

  3. [まだ有効ではありません] をクリックします。 [有効にする構成] ダイアログボックスで、[アクション] 列の [refresh_queues] をクリックします。

  4. YARN の Web UI で、ノードラベルが有効になっているかどうかを確認します。

    • [ノードラベル] ページの結果

      image

    • [スケジューラ] ページの結果

      image

手順 4:特定のパーティションにジョブを送信する

クラスタのキューとノードラベルを構成したら、実行する特定のキューとノードにジョブを送信できます。

  1. クラスタのマスターノードにログインし、Spark のインストールディレクトリに移動します。 この例では、ディレクトリは /opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1 です。

    cd /opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1
  2. Spark ジョブの送信に必要な JAR パッケージをアップロードします。 このセクションでは、spark-submit を使用して Spark ジョブを送信する方法について説明します。

    ./bin/spark-submit --class org.apache.spark.examples.SparkLR --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 2g --conf spark.yarn.am.nodeLabelExpression=batch --conf spark.yarn.executor.nodeLabelExpression=batch --queue=warehouse examples/jars/spark-examples_2.12-3.3.1.jar

    パラメータ

    説明

    class

    アプリケーションのメインクラス。 例:org.apache.spark.examples.SparkLR。

    master

    送信されたジョブが実行される場所。 値を YARN に設定します。

    deploy-mode

    ドライバが起動する場所。 値を cluster に設定します。

    driver-memory

    ドライバのメモリサイズ。 値を 1g に設定します。

    executor-memory

    各エグゼキュータのメモリサイズ。 値を 2g に設定します。

    spark.yarn.am.nodeLabelExpression

    ApplicationMaster(AM)が実行されるノードのラベル。 値を batch に設定します。

    spark.yarn.executor.nodeLabelExpression

    エグゼキュータが実行されるノードのラベル。 値を batch に設定します。

    queue

    ジョブの送信先キュー。 値を warehouse に設定します。

    説明

    ジョブを送信する前にキューのみを指定した場合、ジョブはキューのデフォルトパーティションに送信されます。 [リソースキューの編集] タブのキューの [アクション] 列にある [編集] をクリックして、ビジネス要件に基づいてキューのデフォルトパーティションを変更できます。

  3. YARN の Web UI で、SparkLR ジョブが warehouse キューに送信され、batch パーティションで実行されているかどうかを確認します。

    image

YARN のキューとノードラベルを一緒に使用して、ジョブリソースの論理的および物理的な分離を実装できます。 これにより、異なるジョブ間の相互干渉を防ぎ、ジョブのパフォーマンスと安定性を確保します。

よくある質問

  • spark-submit を使用してジョブを送信するときに、特定のジョブが特定のパーティションで実行されない場合はどうすればよいですか?

    • ジョブを送信するために使用されるコマンドに spark.yarn.executor.nodeLabelExpression パラメータが追加されているかどうかを確認します。

    • キューとパーティションの構成が有効になっているかどうかを確認します。

  • spark-submit を使用してジョブを送信するときに、ジョブのステータスが常に ACCEPTED と表示される場合はどうすればよいですか?

    1. ジョブの送信先キューに十分なリソースがあるかどうかを確認します。 キューに十分なリソースがない場合は、他のジョブが完了し、リソースが解放されるまで待ってからジョブを送信します。

    2. キューに十分なリソースがある場合は、YARN の Web UI で特定のジョブ ID をクリックし、[診断] パラメータの説明を確認します。 説明に "Queue's AM resource limit exceeded" というメッセージが含まれている場合、キューには十分なリソースがありますが、AM リソースが不足しています。 キューのリソースは、AM とエグゼキュータに割り当てられます。 AM リソースはメインアプリケーションの送信に使用され、エグゼキュータリソースはジョブの処理に使用されます。 この場合は、キューのリソース比率を調整する必要があります。 AM リソースの比率を適切に増やすことで、Spark ジョブが正常に送信されるようにすることができます。

      image

    3. キューのリソース比率を調整するには、YARN サービスページの [構成] タブにある capacity_scheduler.xml ファイルを見つけ、yarn.scheduler.capacity.maximum-am-resource-percent 設定項目の値を変更します。 たとえば、設定項目の値を 0.25 から 0.5 に変更できます。

      image

    説明

    ビジネス要件に基づいて、AM のデフォルトリソース比率を調整できます。 たとえば、クラスタに多数の小規模ジョブが存在する場合は、AM のリソース比率を適切に増やすことができます。

関連情報

  • YARN スケジューラについて詳しくは、「YARN スケジューラ」をご参照ください。

  • YARN のノードラベル機能について詳しくは、「ノードラベル」をご参照ください。