YARNのコンテナとは何ですか? nodemanagerのタスクが実行される子JVMと同じですか、それとも異なりますか?
特定のクラスターの単一ノード上のリソース(メモリ)を表します。
コンテナは
1つのMRタスクは、このようなcontainer(s)で実行されます。
単一のNode(または単一の非常に大きなもの)に複数のコンテナが存在する可能性があります。
システム内のすべてのノードは、最小サイズのメモリ(たとえば512MBまたは1 GB)の複数のコンテナで構成されていると見なされます。 ApplicationMasterは、最小メモリサイズの倍数として任意のコンテナを要求できます。
ソース 、セクションResourceManager/Resource Modelを参照してください。
単語「コンテナ」は、YARNで2つのコンテキストで使用されます。
Container:ApplicationMasterに割り当てられたリソースを示します。 ResourceManagerは、リソース/コンテナをApplicationMasterに発行する責任があります。 コンテナ APIを確認してください。
コンテナの起動:割り当てられたリソース(コンテナ)に基づいて、ApplicationMasterはNodeManagerにコンテナの起動を要求し、ノードでタスクを実行します。 ContainerManager APIを確認してください。
Hadoop 2.xでは、コンテナは作業単位が発生する場所です。たとえば、各MapReduceタスク(ジョブ全体ではなく)は1つのコンテナで実行されます。
アプリケーション/ジョブは、1つ以上のコンテナーで実行されます。
システムリソースのセットは各コンテナーに割り当てられ、現在はCPUコアとRAMがサポートされています。Hadoopクラスターの各ノードは複数のコンテナーを実行できます。
Hadoop 1.xでは、各MapReduceタスクを実行するためにJobTrackerによってスロットが割り当てられます。次に、TaskTrackerはタスクごとに個別のJVMを生成します(JVMの再利用が有効になっていない場合を除く)。
コンテナはリソース割り当てです。これは、特定のResourceRequestを許可するResourceManagerの成功した結果です。コンテナは、特定のホスト上で特定の量のリソース(メモリ、CPUなど)を使用する権利をアプリケーションに付与します。
簡単に言えば、コンテナはYARNアプリケーションが実行される場所です。各ノードで使用できます。アプリケーションマスターは、コンテナ(リソースマネージャのコンポーネントの1つ)とコンテナをネゴシエートします。コンテナはNode Managerによって起動されます。
入力データのサイズに応じて、複数の入力分割が作成されます。 MRジョブは、このデータ全体を処理する必要があるため、複数のタスクが作成されます(タスクのマッピングと削減)。したがって、入力ごとに1つのタスクで分割が処理されます。このタスクの実行方法は、リソースマネージャーによって提案されています。リソースマネージャは、どのノードマネージャが無料でどれが忙しいかを知っています。大学の同様の校長とノードマネージャは大学のクラス教師であり、校長はどの先生が無料かを知っています。そのため、ノードマネージャーに、そのタスク(ジョブ全体のごく一部)をコンテナー(jvmなどのメモリー領域)で実行するように要求します。そのため、ジョブはコンテナ内でアプリケーションマスターとして実行されます。
コンテナは、アプリケーションがタスクを実行する場所です。クラスターで実行中のコンテナーの総数を知りたい場合は、クラスターのYarn-ResourceマネージャーUIで確認できます。
糸のURL: http:// Your-Active-ResourceManager-IP:45020/cluster/apps/RUNNING
「コンテナの実行」列で、合計番号実行中のコンテナの詳細が存在します。
注:sparkを使用している場合、spark executorはコンテナ内で実行されます。1つのコンテナは複数のspark executorに対応できます。
Container :
リソースの論理リースとノードで生成される実際のプロセスは、同じ意味で使用されます。タスク(またはAM)が実行されるプロセスと同じです。コンテナを開始するには、コンテナオブジェクトと、タスク(またはAM)を実行するコマンドのリストを設定するCLC(ContainerLaunchContext)を提供します。
nmClient.startContainer(container, clcObj)
ContainerLaunchContext code snippet :
<code>
.
.
.
/**
* Add the list of <em>commands</em> for launching the container. All
* pre-existing List entries are cleared before adding the new List
* @param commands the list of <em>commands</em> for launching the container
*/
@Public
@Stable
public abstract void setCommands(List<String> commands);
</code>