由于“由ApplicationMaster杀死的容器”,Hadoop Mapper失败了

时间:2015-05-29 15:30:08

标签: java linux hadoop mapreduce

我正在尝试在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

我的映射器在这里触发另一个程序,它将在这里处理我的输入文件。由mapper触发的程序通常会占用大量内存。

所以请在这方面帮助我。

2 个答案:

答案 0 :(得分:10)

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>

答案 1 :(得分:3)

容器是纱线JVM流程。在Mapreduce中,应用程序主服务,映射器和减速器任务都是在纱线框架内执行的容器。

您可以通过增加reducer的数量(例如mapreduce.job.reduces=10)或增加reduce heap size(mapreduce.reduce.java.opts=-Xmx2014m)来解决此问题

如果您希望在运行时使用固定数量的reducer,则可以在命令行传递Map / Reduce作业时执行此操作。使用具有所需数字的-D mapreduce.job.reduces=10将在运行时生成那么多减速器。

在代码中,您可以配置JobConf变量来设置映射器和缩减器的数量。假设我们将JobConf变量作为工作。

Configuration conf = new Configuration();
Job job = new Job(conf);
job.setNumReduceTasks(10); // 10 reducers

您还可以将文件拆分为较小的尺寸,以避免内存问题。

如果您仍然遇到问题,请检查纱线日志并发布日志。