hadoop的无法分配存储器java.io.IOException的:误差= 12(hadoop c

2019-10-18 17:20发布

我得到在Hadoop的Greenplum以下错误

java.lang.Throwable: Child Error
    at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)
Caused by: java.io.IOException: Cannot run program "ln": java.io.IOException: error=12, Cannot allocate memory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:488)
    at java.lang.Runtime.exec(Runtime.java:610)
    at java.lang.Runtime.exec(Runtime.java:448)
    at java.lang.Runtime.exec(Runtime.java:386)
    at org.apache.hadoop.fs.FileUtil.symLink(FileUtil.java:567)
    at org.apache.hadoop.mapred.TaskLog.createTaskAttemptLogDir(TaskLog.java:109)
    at org.apache.hadoop.mapred.DefaultTaskController.createLogDir(DefaultTaskController.java:71)
    at org.apache.hadoop.mapred.TaskRunner.prepareLogFiles(TaskRunner.java:316)
    at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:228)
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
    at java.lang.ProcessImpl.start(ProcessImpl.java:81)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
    ... 8 more

服务器有7G RAM和1G的交换。

堆大小1024米和mapred.child.opts被设置到512M。

有任何想法吗?

Answer 1:

减少的TaskTracker内存为256M和有限的TaskTracker的数量为1的每个节点,都高的原因孩子的错误,并采取了MapReduce工作运行更多的时间。



Answer 2:

你想出什么内存配置,Hadoop是可能无论如何抛出此。 问题是,对于简单的文件系统的任务,如创建符号链接或检查可用磁盘空间,Hadoop的叉从向TaskTracker的过程。 这一过程将有尽可能多的内存分配给它作为其父了。

典型的方法来防止这个问题是要离开的分配给TT未分配尽可能多的物理内存,增加了一些交换到主机为这些类型的任务,或允许“过度承诺”。



文章来源: hadoop cannot allocate memory java.io.IOException: error=12