私は新しい API の実際の目的について頭を悩ませようとしており、インターネットで読んでいると、扱っていたのと同じ質問に対するさまざまな回答が見つかりました。
答えを知りたい質問は次のとおりです。
1) MRv2/YARN デーモンのうち、アプリケーション コンテナーの起動とアプリケーション リソースの使用状況の監視を担当するのはどれか。
2) MRv2/YARN が対処するように設計されている 2 つの問題はどれですか?
このスレッドを他の読者にとって有益で建設的なものにするために、私の検索から得たリソースと実際のデータを指定します。そのため、質問をして投稿するだけで十分な情報を提供しすぎたように見えないことを願っています。より短い。
最初の質問については、ドキュメントを読んで、頼りになる 3 つの主要なリソースを見つけることができました。
Hadoop のドキュメントから:
ApplicationMaster<-->NodeManager コンテナーを起動します。NMClientAsync オブジェクトを使用して NodeManager と通信し、NMClientAsync.CallbackHandler によってコンテナー イベントを処理します。
ApplicationMaster は YARN クラスターと通信し、アプリケーションの実行を処理します。非同期方式で操作を実行します。アプリケーションの起動時に、ApplicationMaster の主なタスクは次のとおりです。
a) ResourceManager と通信して、将来のコンテナーのリソースをネゴシエートおよび割り当てる。
b) コンテナーの割り当て後、YARN NodeManager (NM) に通信してアプリケーションコンテナーを起動します。
Hortonworks のドキュメントから
ApplicationMaster は、事実上、フレームワーク固有のライブラリのインスタンスであり、ResourceManager からのリソースをネゴシエートし、NodeManager と連携してコンテナーとそのリソース消費を実行および監視します。ResourceManager から適切なリソース コンテナーをネゴシエートし、それらの状態を追跡し、進行状況を監視する責任があります。
Cloudera のドキュメントから:
MRv2 デーモン -
ResourceManager – クラスタごとに 1 つ – ApplicationMasters を起動し、スレーブ ノードにリソースを割り当てます
ApplicationMaster – ジョブごとに 1 つ – リソースを要求し、個々の Map および Reduce タスクを管理します
NodeManager – スレーブ ノードごとに 1 つ – 個々のスレーブ ノードのリソースを管理します
JobHistory – クラスターごとに 1 つ – ジョブのメトリックとメタデータをアーカイブします
質問 (アプリケーション コンテナの起動とアプリケーション リソースの使用状況の監視を担当するデーモンはどれか) に戻ると、次のように自問します。
それはNodeManagerですか?それはApplicationMasterですか?
私が理解していることから、ApplicationMaster は NodeManager に実際に仕事をさせる人です。つまり、誰が箱を地面から持ち上げる責任があるのか を尋ねるようなものです。体を動かしてリフティングをさせます...
難しい質問だと思いますが、答えは 1 つしかありません。
2 番目の質問については、オンラインで読むと、多くのリソースからさまざまな回答を見つけることができたので混乱しましたが、私の主な情報源は次のとおりです。
Cloudera のドキュメントから:
MapReduce v2 (「MRv2」) – YARN の上に構築 (Yet"Another Resource NegoGator)
– ResourceManager/NodeManager アーキテクチャを使用
– クラスタのスケーラビリティを向上
– ノード リソースは、あらゆるタイプのタスクに使用できます
– クラスタの使用率を向上
– 非/MR ジョブのサポート
質問に戻ると (MRv2/YARN が対処するように設計されている 2 つの問題はどれですか?)、私は MRv2 が JobTracker へのリソースの圧迫を防ぐなどのいくつかの変更を行ったことを知っています (MRv1 では、クラスター内のノードの最大数は約 4000 になる可能性があり、 MRv2 はこの数の 2 倍以上です)。また、MPI などの MapReduce 以外のフレームワークを実行する機能を提供することもわかっています。
ドキュメントから:
Application Master は従来の ResourceManager の機能の多くを提供するため、システム全体をより劇的に拡張できます。テストでは、最新のハードウェアで構成された 10,000 ノード クラスターを重大な問題なくシミュレートしました。
と:
すべてのアプリケーション フレームワーク固有のコードを ApplicationMaster に移動すると、システムが一般化され、MapReduce、MPI、グラフ処理などの複数のフレームワークをサポートできるようになります。
しかし、NameNode が単一障害点であり、新しいバージョンには高可用性モードを介したスタンバイ NameNode があるという事実にも対処したと思います (古い API と新しい API の機能を混同している可能性があります。 MRv1 対 MRv2 であり、それが私の質問の原因かもしれません):
Hadoop 2.0.0 より前は、NameNode は HDFS クラスターの単一障害点 (SPOF) でした。各クラスタには単一の NameNode があり、そのマシンまたはプロセスが使用できなくなった場合、NameNode が再起動されるか、別のマシンで起動されるまで、クラスタ全体が使用できなくなります。
では、3 つのうち 2 つを選択する必要がある場合、MRv2/YARN が対処するように設計されている 2 つの問題として機能する 2 つはどれでしょうか?
-JobTracker のリソース プレッシャー
-MPI など、MapReduce 以外のフレームワークを実行する機能。
- NameNode の単一障害点。
前もって感謝します!D