Hadoopでmap reduceプログラムを実行しようとしています。
Hadoopシングルノードクラスターにジョブを送信するとき。ジョブは作成されますが、メッセージで失敗します
「コンテナがApplicationMasterによって殺された」
使用される入力のサイズは10 MBです。
入力ファイル400 KBの同じスクリプトを使用した場合、成功しました。ただし、サイズが10 MBの入力ファイルでは失敗します。
私の端末に表示される完全なログは次のとおりです。
15/05/29 09:52:16 WARN util.NativeCodeLoader: Unable to `load native- hadoop library for your platform... using builtin-Java classes where applicable
Submitting job on the cluster...
15/05/29 09:52:17 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/05/29 09:52:18 INFO input.FileInputFormat: Total input paths to process : 1
15/05/29 09:52:18 INFO mapreduce.JobSubmitter: number of splits:1
15/05/29 09:52:19 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1432910768528_0001
15/05/29 09:52:19 INFO impl.YarnClientImpl: Submitted application application_1432910768528_0001
15/05/29 09:52:19 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1432910768528_0001/
15/05/29 09:52:19 INFO mapreduce.Job: Running job: job_1432910768528_0001
15/05/29 09:52:29 INFO mapreduce.Job: Job job_1432910768528_0001 running in uber mode : false
15/05/29 09:52:29 INFO mapreduce.Job: map 0% reduce 0%
15/05/29 09:52:41 INFO mapreduce.Job: map 100% reduce 0%
15/05/29 10:03:01 INFO mapreduce.Job: map 0% reduce 0%
15/05/29 10:03:01 INFO mapreduce.Job: Task Id : attempt_1432910768528_0001_m_000000_0, Status : FAILED
AttemptID:attempt_1432910768528_0001_m_000000_0 Timed out after 600 secs
Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
ここでのマッパーは、ここで入力ファイルを処理する他のプログラムをトリガーしています。マッパーによってトリガーを取得しているプログラムは、通常大量のメモリを消費します。
この点で私を助けてください。
yarn-site.xml
に以下のプロパティを含め、VM
を再起動します。
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
コンテナは、ヤーンJVMプロセスです。 Mapreduceのアプリケーションマスターサービスでは、マッパータスクとレデューサータスクはすべて、yarnフレームワーク内で実行されるコンテナーです。
この問題を解決するには、リデューサーの数を増やす(たとえばmapreduce.job.reduces=10
)か、削減ヒープサイズを増やす(mapreduce.reduce.Java.opts=-Xmx2014m
)
実行時にリデューサーの数を固定したい場合は、コマンドラインでMap/Reduceジョブを渡すときに行うことができます。 -D mapreduce.job.reduces=10
を必要な数で使用すると、実行時にその多くのレデューサーが生成されます。
コードでは、JobConf
変数を構成して、マッパーとレデューサーの数を設定できます。ジョブとしてJobConf
変数があるとします。
Configuration conf = new Configuration();
Job job = new Job(conf);
job.setNumReduceTasks(10); // 10 reducers
この特定のジョブのファイルを小さいサイズに分割して、メモリの問題を回避することもできます。
それでも問題が解決しない場合は、糸のログを確認してログを投稿してください。