糸site.xml構成を説明
yarn.scheduler.minimum-割り当て-MB
yarn.scheduler.maximum-MB-割り当て
説明:最小および最大メモリ、アプリケーションメモリを実行しているアプリケーションが最大値を超えることはできませんを適用することができる単一の容器は、以下最小より最小値は、最小ビットオペレーティングシステムでページのように、このような観点から、割り当てられています。最小の別の用途があり、ノードが容器ノートの最大数を計算する:これら2つの値は、(動的にアプリケーションの実行を変更することを意味する本明細書に記載した)動的に変更されないことで設定されています。
デフォルト:1024/8192
yarn.scheduler.minimum-割当vcores
yarn.scheduler.maximum-割当vcores
パラメータ:個々の仮想CPUの最小/最大数を適用してもよいです。例えば、各タスクに1と4に設定し、実行しMapRedceジョブは、1つの仮想CPUの最小を申請することができたとき、あなたは4つの仮想CPUまでを申請することができます。
デフォルト:1/32
yarn.nodemanager.resource.memory-MB
yarn.nodemanager.vmem比-PMEMの
説明:各ノードの利用可能な最大メモリ二RM値で、この値を超えてはなりません。RMによって分割されたメモリの最小値を有する容器:この値は、コンテナの最大数、すなわちを計算するために使用することができます。仮想メモリの割合は、タスクによって使用されるメモリの割合で、デフォルト値は2.1倍である;注:最初のパラメータが設定後は、不変で、全体の演算処理を動的に変更することはできませんし、この値がデフォルトサイズ8Gで、でもコンピュータメモリ8Gの欠如はまた、使用に8Gのメモリを押します。
デフォルト値:8G /2.1
yarn.nodemanager.resource.cpu-vcores
パラメータの:ノードマネージャの仮想CPUの利用可能な合計数。
デフォルト:. 8
:次のようにAMメモリ構成パラメータは、例では、(両方のAM特性値は、mapred-site.xmlで配置されなければならない)のMapReduceをここで説明する
mapreduce.map.memory.mb
mapreduce.reduce。 memory.mbの
説明:このパラメータは、MapReduceの2つの2タスク指定(マップとタスクを低減する)メモリサイズのため、コンテナの最小値と最大値RMとの間であるべきです。何の設定は次のような簡単な式で得られていない場合:
最大(MIN_CONTAINER_SIZE、(RAM使用可能な合計)/コンテナ))
、一般的に二度マップを削減する必要があります。注:;これらの2つの値、アプリケーションの起動時のパラメータを変更することで
:設定オプションを次のようにAM他のメモリ関連のパラメータ、JVM関連するパラメータは、これらのパラメータとすることができる
mapreduce.map.java.opts
mapreduce.reduce .java.optsの
説明:これは、二つのパラメータは、JVM(Java等、Scalaは、)用意されたプログラムを実行する必要があるため主にこれら2つの設定を介してJVMにパラメータを渡すことができ、-Xmxは-Xms、メモリに関連付けられていますその他のオプションを指定できます。この数値の大きさ、及びAMにreduce.mb間map.mbべきです。
私たちは、時に主に以下の三つの側面糸のメモリ構成を構成した場合、上記の内容を要約:各マップと使用可能な物理メモリの制限を減らして、各タスクのためのJVMのサイズに制限、仮想メモリの制限;
メモリ命令のために、次のエラーのエラーの特定のインスタンス、して、以下:
コンテナ[PID = 41884、ContainerIDの= container_1405950053048_0016_01_000284]仮想メモリを超えて実行されていることは現在の使用状況を制限:.使用さ2.9ギガバイトの物理メモリの314.6メガバイト;仮想6.2ギガバイトの8.7ギガバイトメモリは、容器..キリング使用
:次のように構成された
<プロパティ>
<名前> yarn.nodemanager.resource.memory-MB </名前>
<値> 100000 </ value>の
</プロパティ>
<プロパティ>
<名前> yarn.schedulerを。割り当て-MB-最大</名前>
<値> 10000 </ value>の
</プロパティ>
<プロパティ>
<名前> yarn.scheduler.minimum-割り当て-MB </名前>
<値> 3000 </ value>の
</プロパティ>
<プロパティ>
<名前> mapreduce.reduce.memory.mb </名前>
<値> 2000 </ value>の
</プロパティ>
3000メートルと万メートル、および提供を減らす:私たちが見に構成することにより、最小値と最大メモリRAMのコンテナですマップが設定されていないデフォルト値は、2つの値が3000メートル以下2000メートルよりもされ、「使用2.9ギガバイトの物理メモリ」のログです。そしてので、仮想メモリはそう* 2.1 = 6.2G 3000がそうであるように作業マップと合計仮想メモリを削減するために、(2.1倍)デフォルト率を使用しています。この値より仮想メモリのアプリケーションは、それは誤りです。解決策:スタート糸が稼働している仮想メモリ、またはアプリケーションの調整メモリサイズの比率を調整することである。
Mapred-site.xmlに
糸の管理の枠組み、RMアプリケーション・リソースの両方からAM、又はそれらのリソースを管理するノードはコンテナによって運ばれるNMで。コンテナ糸は、メモリとカップと上のように、など、ここでのリソース、リソースの抽象化です。次に、コンテナ、より詳細な説明を行っています。私たちは、コンテナの比較画像を持っていることを知るために、最初の外観は:
私たちは、まずAMの、リソースを取得した後、RM要求パケットResourceRequestからアプリケーションパッケージを介してそのリソースをAM、包装、上の図から見ることができますタスクを開始するためにContainerLaunchContextオブジェクト、オブジェクトAMおよびNM導通、通信、です。プロトコルResourceRequest、容器及びContainerLaunchContext以下により
次のように構成さResourceRequest:
メッセージResourceRequestProto {
オプションの優先順位= PriorityProto 1; //リソース優先順位
オプションの文字列RESOURCE_NAME = 2; //所望のホストリソースが存在する
任意ResourceProto能力= 3; //リソース(MEM、CPU)
。任意num_containers = 4のInt32;条件コンテナ満足//数
。任意relax_locality = BOOL 5; //デフォルト= trueに;
}
上記の構造の簡単リファレンスに基づいて説明します。
2:ホストを得ることが望ましいが、最終的にはAM及びRMを交渉することを決めされた出願の時、で;
3:即ち、2つだけのリソースを含む:メモリーとCPU、アプリケーションのモード:
注:1、2及び4起因し無制限のリソースのアプリケーションはありません、APは、アプリケーションの無限の資源です。すなわち、同じ優先度の同じノードのリソース要求に一つだけを持つことができ、前に発行された各リソース要求AMと同じノードで同じ優先順位リソース要求を上書きします:オーバーレイモード、すなわち、を使用して2糸リソース要求。
容器構造:
メッセージContainerProto {
オプションID = ContainerIdProto 1; //コンテナID。
任意NodeIdProtoのnodeId = 2; //ノード容器(リソース)
オプションの文字列= node_http_address 3;
任意ResourceProto =リソース4; //番号割り当て容器。
任意PriorityProto優先度= 5;容器の//優先
任意hadoop.common.TokenProto container_token = 6; //コンテナトークン、 セキュア認証用
}
注:AMは、容器を複数受信した場合、各コンテナ船は、タスクを実行することができ、私たちは、さらに数字を与えるだろう。以下のような:MapReduceの
ContainerLaunchContext構造:
ContainerLaunchContextProto {メッセージ
反復StringLocalResourceMapProto LocalResources = 1; //例えば、コンテナのリソースで実行中のプログラムのために必要:JARパッケージ
オプションバイトトークン= 2;セキュリティモードにおける// SecurityTokens
反復StringBytesMapProto service_data = 3;
StringStringMapProto環境反復4 =。 ; //コンテナ環境変数は、起動に必要な
繰り返し文字列のコマンド= 5; //コンテナは、すなわち$ JAVA_HOME / binに/ javaのorg.ourclassrepeated ApplicationACLMapProto、実行するために、このようなJavaプログラムとしてコマンドプログラムを実行 application_ACLs = 6; // アクセス制御リストのアプリケーションコンテナに属する
}
コードに関連して以下では、(単純な有限状態機械を記述するより良い理解を容易にするが、十分に短い時間でなければならない)例のみContainerLaunchContextとして記載されている:
新しいContainerLaunchContextを適用します:
ContainerLaunchContext CTX = Records.newRecord(ContainerLaunchContext.class);
必要に応じて情報を入力します。
ctx.setEnvironment(...);
childRsrc.setResource(...);
ctx.setLocalResources(...);
ctx.setCommandsは(...);
タスクを開始:
startReq.setContainerLaunchContext(CTX)を、
最後に、コンテナがあること以下のように要約:容器は、糸リソースの抽象化、カプセル化ノード、主にCPUとメモリ上のいくつかのリソースは、コンテナがNMアプリケーションにAMの場合、その操作が配置されているNMリソースへのAMによって開始され、そして最終的に実行され
ています。コンテナの2種類があります:1は、AMコンテナを実行するために必要とされる、APは、タスクにRMアプリケーションを実行するために他のです。
各スレーブは動作することができる
<= yarn.nodemanager.resource.memory-MB / mapreduce.map.memory.mb、地図データを
低減するタスクの数<= yarn.nodemanager.resource.memory-MB / mapreduce.reduce.memory。メガバイト