mapreduce.map.memory.mb
パラメーターとmapred.map.child.Java.opts
パラメーターの関係を知りたいのですが。
mapreduce.map.memory.mb
> mapred.map.child.Java.opts
ですか?
ありがとう、ケワル。
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メモリ不足エラーが発生した場合は、両方のメモリ設定を増やす必要があります。
次のプロパティを使用すると、タスクを実行している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
-Xmx
をmemory.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.shuffleInMemory
でOutOfMemoryError
にヒットした場合にディスクでシャッフルが発生します。