web-dev-qa-db-ja.com

Apache Hadoop YARNの「mapreduce.map.memory.mb」と「mapred.map.child.Java.opts」の関係は何ですか?

mapreduce.map.memory.mbパラメーターとmapred.map.child.Java.optsパラメーターの関係を知りたいのですが。

mapreduce.map.memory.mb> mapred.map.child.Java.optsですか?

ありがとう、ケワル。

45
yedapoda

mapreduce.map.memory.mbは、Hadoopがマッパーに割り当てることができるメモリの上限(メガバイト単位)です。デフォルトは512です。この制限を超えると、Hadoopは次のようなエラーでマッパーを強制終了します。

Container [pid = container_1406552545451_0009_01_000002、containerID = container_234132_0001_01_000001]は、物理メモリの制限を超えて実行されています。現在の使用量:使用されている512 MBの物理メモリのうち569.1 MB。 970.1 MBの1.0 GBの仮想メモリが使用されます。コンテナを殺します。

HadoopマッパーはJavaプロセスであり、各Javaプロセスにはmapred.map.child.Java。 opts(またはHadoop 2+のmapreduce.map.Java.opts)。マッパープロセスがヒープメモリを使い果たすと、マッパーはJavaメモリ不足の例外をスローします。

エラー:Java.lang.RuntimeException:Java.lang.OutOfMemoryError

したがって、HadoopとJava設定は関連しています。Hadoop設定は、より多くのリソースの強制/制御設定であり、Javaは、リソース構成の詳細です1。

Javaヒープ設定は、Javaコード用にメモリを予約する必要があるため、Hadoopコンテナのメモリ制限よりも小さくする必要があります。通常、20%のメモリを予約することをお勧めしますしたがって、設定が正しい場合は、JavaベースのHadoopタスクがHadoopによって強制終了されることはないため、上記のような「コンテナの強制終了」エラーは表示されません。

Javaメモリ不足エラーが発生した場合は、両方のメモリ設定を増やす必要があります。

66
user1234883

次のプロパティを使用すると、タスクを実行しているJVMに渡すオプションを指定できます。これらを-Xmxとともに使用して、ヒープ使用可能を制御できます。

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.child.Java.opts            
mapred.map.child.Java.opts         mapreduce.map.Java.opts
mapred.reduce.child.Java.opts      mapreduce.reduce.Java.opts

これらの最初のHadoop 2に直接相当するものはありません。ソースコードのアドバイスは、他の2つを使用することです。 mapred.child.Java.optsは引き続きサポートされます(ただし、他の2つのより具体的な設定が存在する場合は上書きされます)。

これらを補完するものとして、以下を使用して、ヒープ、スタック、クラス定義など、タスクで使用可能な合計メモリ(仮想)を制限できます。

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.job.map.memory.mb           mapreduce.map.memory.mb
mapred.job.reduce.memory.mb        mapreduce.reduce.memory.mb

-Xmxmemory.mb値の75%に設定することをお勧めします。

YARNクラスターでは、ジョブはサーバー側の構成yarn.scheduler.maximum-allocation-mbより多くのメモリを使用してはなりません。そうしないと、ジョブは強制終了されます。

これらのデフォルトと優先順位を確認するには、HadoopソースコードのJobConfおよびMRJobConfigを参照してください。

トラブルシューティング

Mapred-site.xmlがこれらの設定のデフォルトを提供する場合があることに注意してください。これは混乱を招く可能性があります-例えばジョブがmapred.child.Java.optsをプログラムで設定する場合、mapred-site.xmlがmapreduce.map.Java.optsまたはmapreduce.reduce.Java.optsを設定する場合、これは効果がありません。 mapred-site.xmlをオーバーライドするには、代わりにジョブでこれらのプロパティを設定する必要があります。ジョブの構成ページを確認し(「xmx」を検索)、どの値が適用され、どこから来たのかを確認します。

ApplicationMasterメモリ

YARNクラスターでは、次の2つのプロパティを使用して、ApplicationMasterで使用可能なメモリの量を制御できます(入力分割の詳細、タスクのステータスなどを保持するため)。

Hadoop 0.x, 1.x                    Hadoop 2.x
-------------------------------    --------------------------
                                   yarn.app.mapreduce.am.command-opts
                                   yarn.app.mapreduce.am.resource.mb

ここでも、-Xmx(前者)をresource.mb値の75%に設定できます。

その他の構成

メモリ制限に関連する他の多くの設定があり、それらのいくつかは非推奨です-JobConfクラスを参照してください。便利なもの:

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.job.reduce.total.mem.bytes  mapreduce.reduce.memory.totalbytes

これを低い値(10)に設定すると、MapOutputCopier.shuffleInMemoryOutOfMemoryErrorにヒットした場合にディスクでシャッフルが発生します。

53
Chris