ビッグデータ入門 (5) YARN の概要と詳細なワークフロー

Apache YARN (Yet Another Resource Negotiator、別のリソース コーディネーター) は、Hadoop のクラスター リソース管理システムです。YARN の中心的な考え方は、リソース管理とジョブのスケジュール/監視の機能を別個のデーモン プロセスに分割することです。ResourceManager はクラスター リソースの管理に使用され、NodeManager はコンテナーの起動と監視に使用されます。

1. YARN の関連概念の分析

  1. コンテナ (コンテナ):クラスタ リソース (メモリ、CPU、ディスク、ネットワークなどを含む) の抽象化とカプセル化であり、割り当てられたシステム リソースのグループです。
  2. ジョブ/アプリケーション (ジョブまたはアプリケーション):実行する必要がある作業単位です。これには、入力データ、MapReduce プログラム、構成情報が含まれます。
  3. ResourceManager (RM、Resource Manager):システム全体のリソース管理と割り当てを担当するグローバル リソース マネージャーであり、主に Scheduler と ApplicationManager の 2 つのコンポーネントで構成されます。
  4. スケジューラー: YARN スケジューラー スケジューラーの仕事は、確立されたポリシーに従ってアプリケーションにリソースを割り当てることです。現在、YARN には FIFO スケジューラ、キャパシティ スケジューラ、およびフェア スケジューラの 3 つのスケジューラがあります。
  5. ApplicationManager (アプリケーション マネージャー):システム内のすべてのアプリケーションの管理を担当します。これには、主にアプリケーションの送信、ApplicationMaster を開始するためのスケジューラーとのリソースのネゴシエーション、ApplicationMaster の実行ステータスの監視と障害時の再起動などが含まれます。
  6. ApplicationMaster (App Mstr):クライアントがアプリケーションを送信するたびに、新しい ApplicationMaster が作成されます。ApplicationMasterはResourceManagerでコンテナリソースを申請し、リソースを取得後、実行するプログラムをコンテナに送信して起動し、分散コンピューティングを実行します。
  7. NodeManager (ノード マネージャー):各マシン上の ResourceManager のエージェントです。その主な仕事は、コンテナーを管理し、コンテナーのリソース使用状況を監視し、これらのリソースの使用状況レポートを ResourceManager/Scheduler に定期的に提供することであり、ResourceManager はノードのリソースに対してどのような操作 (割り当て、リサイクルなど) を実行するかを決定します。

ここに画像の説明を挿入

2. YARNへの申請手続きの詳細説明

ユーザーがアプリケーションを Yarn に送信すると、Yarn は 2 つの段階でプログラムを実行します: 第 1 段階では ApplicationMaster を開始し、第 2 段階では ApplicationMaster がアプリケーションを作成し、そのリソースを申請し、操作が完了するまでその実行プロセス全体を監視します。

  1. まず、クライアントは、ApplicationMaster プログラム、ApplicationMaster を開始するコマンド、およびユーザー プログラムを含むアプリケーションを ResourceManger に送信します。
  2. ResourceManager は NodeManager と通信して、アプリケーションに最初のコンテナを割り当てます。そして、このコンテナ内でこのアプリケーションに対応する ApplicationMaster を実行します(ステップ 2a および 2b に対応)。
  3. ApplicationMaster が開始すると、自身を ResourceManager に登録し、ハートビート接続を維持します。
  4. 次に、ApplicationMaster はアプリケーションを複数のタスク (MapReduce の MapTask と ReduceTask など) に分割し、ポーリングを使用して、RPC リクエストを通じて各タスクの ResourceManager からリソースを要求および取得します。
  5. ResourceManager は、ApplicationMaster が要求したコンテナ情報を返します。正常に適用されたコンテナは、ApplicationMaster によって初期化されます。コンテナの起動情報が初期化された後、ApplicationMaster は対応する NodeManager と通信し、NodeManager にコンテナの起動を要求します。
  6. コンテナの起動後、アプリケーションマスターはノードマネージャーとの通信を維持し、ノードマネージャーで実行されているタスクを監視および管理します。コンテナの実行中、アプリケーションマスターはコンテナを監視します。コンテナは、RPC プロトコルを通じて、自身の進行状況とステータス情報を対応する ApplicationMaster に報告します。
  7. アプリケーションの実行が終了すると、ApplicationMaster は ResourceManager からログアウトして自身を閉じ、コンテナーが再利用できるようにします。

以上がアプリケーションの大まかな動作プロセスです。

3. YARN Scheduler スケジューラ

1. FIFO スケジューラ (先入れ先出しスケジューラ):アプリケーションを、送信された順序で先入れ先出しキューに入れます。そして、リソースの割り当てが行われると、先入れ先出しの原則に従ってアプリケーションにリソースが割り当てられます。最初のアプリケーションのリソースが満たされると、次のアプリケーションにリソースが割り当てられます。

2. キャパシティ スケジューラ (容量スケジューラ):クラスタ リソース全体が複数のキューに分割され、各キューは需要に応じて異なる容量 (つまり、リソースの割合) で構成され、FIFO スケジューリング戦略が採用されます。異なるキューに容量を割り当てることで、各キューがクラスター全体のリソースをすべて占有することがなくなります。

上の図に示すように、クラスター リソース全体を AB の 2 つのキューに分割できます。このうち、A はクラスタ全体のリソースの 60%、B は 40% に割り当てられ、各キューはさらに異なるサブキューに分割できます (例: B キューは引き続き B1 と B2 に分割されます)。

 

注: 1 つのジョブがキュー容量を超えるリソースを使用することはありません。ただし、キュー リソース全体が十分ではなく、他の組織キューにアイドル リソースがある場合、キャパシティ スケジューラはこれらのアイドル リソースをキュー内のジョブに割り当てます。これはキューの弾力性と呼ばれます。キュー全体のリソース使用量の上限(割合)は、maximum-capacity によって制限できます。

3. フェア スケジューラ (フェア スケジューラ):キャパシティ スケジューラとは異なり、フェア スケジューラは特定のシステム リソースを事前に占有するのではなく、リソースを動的に割り当てます。

上の図に示すように、ジョブ 1 が送信されると、クラスター全体に他のジョブは存在せず、ジョブ 1 がクラスター全体のリソースを独占します。ジョブ 2 が送信されると、ジョブ 1 は解放されたリソースを新しいジョブに割り当て、最終的に各タスクがほぼ同じ量のリソースを取得するようにして、公平性の目標を達成します。

フェア スケジューラは複数のキュー間で動作することもできます。上の図に示すように、たとえば、それぞれキューを持つ 2 人のユーザー A と B がいます。A がジョブを開始し、B に送信するタスクがない場合、A はすべてのクラスター リソースを取得します。B がジョブを開始すると、A のタスクは実行を継続しますが、キュー A はそのリソースの一部を徐々に解放し、その後 2 つのタスクがそれぞれクラスター リソースの半分を取得します。この時点で B が 2 番目のジョブを開始し、他のタスクがまだ実行中の場合、キュー B のリソースはキュー B の最初のジョブと共有されます。つまり、キュー B の 2 つのジョブはそれぞれクラスターのリソースの 4 分の 1 を使用しますが、キュー A のジョブは依然としてクラスターのリソースの半分を使用します。その結果、クラスターのリソースは最終的に 2 人のユーザー間で均等に共有されます。

クラスタ全体のリソースが枯渇したときにジョブがサブミットされると、ジョブは受け付けられた状態になり、クラスタ リソースの解放を待ちます。ジョブの送信から実行までに必要な時間を予測可能にするために、フェア スケジューラはプリエンプションをサポートしています。いわゆるプリエンプションは、スケジューラが公平なシェアよりも多くのリソースを占有するキューの内容を終了できるようにすることです。注: 終了したコンテナを再実行する必要があるため、プリエンプションはクラスター全体の効率を低下させます。

4. エンタープライズキューの構成例

 root
--> app(Fair Scheduler: 80%)
    --> etl-monthly (クラスター全体のリソースの 30% を占有、最大 80%、FIFO 戦略を採用) --> etl-daily (クラスター全体のリソースの 30% を占有、最大 100%、FIFO 戦略を採用) --> etl-eco (クラスター全体のリソースの 20% を占有、最大 6 0%、FIFO戦略を採用) --> デフォルト(公平なスケジュール:
    20
    %
)

5、YARNコマンド

アプリケーションを閉じます:yarn application --kill <application_id>、たとえば、yarn application --kill application_1618392236222_129696

詳細については、公式ドキュメントを参照してください: Apache Hadoop 3.3.1 – YARN コマンド

6. 参考文献

Hadoop Yarn フレームワーク原理の分析 - プログラマー募集

Yarn の基本概念 (1) - RivenDong-CSDN ブログ

おすすめ

転載: blog.csdn.net/qq_37771475/article/details/119247800