Hadoop Mapper因为"Container killed by the ApplicationMaster"而失败。
Hadoop Mapper因为"Container killed by the ApplicationMaster"而失败。
我正在尝试在Hadoop上执行一个map reduce程序。\n当我将作业提交到Hadoop单节点集群时,作业被创建但是失败了,显示错误信息为“Container killed by the ApplicationMaster”。\n输入的文件大小为10MB。\n当我使用相同的脚本和400KB大小的输入文件时,作业成功了。但是对于10MB大小的输入文件,失败了。\n完整的日志显示如下:\n
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
\n我的mapper触发了另一个程序来处理我的输入文件。被mapper触发的程序通常会消耗大量的内存。\n所以请在这方面给我帮助。
Hadoop Mapper 出现 "Container killed by the ApplicationMaster" 错误的原因可能是由于以下几个问题:
1. Reduce 任务数量过少。可以通过增加 reducers 的数量来解决此问题。例如,可以将 mapreduce.job.reduces 设置为 10:`mapreduce.job.reduces=10`。
2. Reduce 堆内存不足。可以通过增加 reduce 的堆内存大小来解决此问题。例如,可以将 mapreduce.reduce.java.opts 设置为 -Xmx2014m:`mapreduce.reduce.java.opts=-Xmx2014m`。
3. 在运行时通过命令行指定固定数量的 reducers。可以使用 `-D mapreduce.job.reduces=10` 来指定所需的 reducers 数量。
4. 在代码中配置 JobConf 变量来设置 mapper 和 reducer 的数量。例如,可以使用以下代码来设置 reducers 数量为 10:
Configuration conf = new Configuration(); Job job = new Job(conf); job.setNumReduceTasks(10); // 10 reducers
此外,还可以将文件分割成更小的大小,以避免内存问题。
如果仍然出现问题,请检查 yarn 日志并将日志内容提供出来。
在Hadoop中,如果出现"Hadoop Mapper is failing because of 'Container killed by the ApplicationMaster'"的问题,可以通过以下方法解决。
首先,需要在yarn-site.xml文件中添加以下属性,并重新启动虚拟机(VM)。
yarn.nodemanager.vmem-check-enabled false Whether virtual memory limits will be enforced for containers yarn.nodemanager.vmem-pmem-ratio 4 Ratio between virtual memory to physical memory when setting memory limits for containers
以上就是解决"Hadoop Mapper is failing because of 'Container killed by the ApplicationMaster'"问题的方法。