Apache Hadoop YARN

YARNの基本的な考え方は、リソース管理とジョブのスケジューリング/監視の機能を別々のデーモンに分割することです。グローバルなResourceManager(RM)とアプリケーションごとのApplicationMaster(AM)を持つという考えです。アプリケーションは、単一のジョブまたはジョブのDAGのいずれかです。

ResourceManagerとNodeManagerは、データ計算フレームワークを形成します。ResourceManagerは、システム内のすべてのアプリケーション間でリソースを仲裁する最終的な権限です。NodeManagerは、マシンごとのフレームワークエージェントであり、コンテナを担当し、それらのリソース使用量(CPU、メモリ、ディスク、ネットワーク)を監視し、それをResourceManager/Schedulerに報告します。

アプリケーションごとのApplicationMasterは、実際にはフレームワーク固有のライブラリであり、ResourceManagerからリソースを交渉し、NodeManagerと連携してタスクを実行および監視する役割を担っています。

MapReduce NextGen Architecture

ResourceManagerには、SchedulerとApplicationsManagerという2つの主要なコンポーネントがあります。

Schedulerは、容量、キューなどの一般的な制約に従って、さまざまな実行中のアプリケーションにリソースを割り当てる役割を担っています。Schedulerは、アプリケーションのステータスの監視や追跡を行わないため、純粋なスケジューラです。また、アプリケーションの障害やハードウェアの障害によるタスクの失敗の再起動についても、保証を提供しません。Schedulerは、アプリケーションのリソース要件に基づいてスケジューリング機能を実行します。メモリ、CPU、ディスク、ネットワークなどの要素を含むリソースのコンテナという抽象的な概念に基づいて実行します。

Schedulerには、クラスタリソースをさまざまなキュー、アプリケーションなどに分割する役割を担うプラグ可能なポリシーがあります。CapacitySchedulerFairSchedulerは、プラグインの例です。

ApplicationsManagerは、ジョブの提出を受け入れ、アプリケーション固有のApplicationMasterを実行するための最初のコンテナを交渉し、障害発生時のApplicationMasterコンテナの再起動サービスを提供する役割を担っています。アプリケーションごとのApplicationMasterは、Schedulerから適切なリソースコンテナを交渉し、そのステータスを追跡し、進捗状況を監視する責任があります。

hadoop-2.xのMapReduceは、以前の安定版リリース(hadoop-1.x)とのAPI互換性を維持しています。これは、すべてのMapReduceジョブは、再コンパイルするだけで、YARN上で変更せずに実行されることを意味します。

YARNは、ReservationSystemを介してリソース予約の概念をサポートしています。これは、ユーザーが時間経過に伴うリソースのプロファイルと時間的制約(例:期限)を指定し、重要なジョブの予測可能な実行を確保するためにリソースを予約できるようにするコンポーネントです。ReservationSystemは、時間経過に伴うリソースを追跡し、予約のアドミッションコントロールを実行し、予約が満たされるように基盤となるスケジューラに動的に指示します。

数千ノードを超えてYARNをスケーリングするために、YARNはYARN Federation機能を介してFederationの概念をサポートしています。Federationにより、複数のYARN(サブ)クラスタを透過的に接続し、単一の巨大クラスタとして表示させることができます。これは、より大規模なスケールを実現するため、または非常に大規模なジョブのために、またはそれらすべてに容量を持つテナントのために、複数の独立したクラスタを一緒に使用できるようにするために使用できます。