2013-09-27 24 views
0

我得到在Hadoop Greenplum的hadoop的無法分配存儲器java.io.IOException的:誤差= 12

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交換。

堆大小爲1024m,mapred.child.opts設置爲512m。

有什麼想法?

回答

0

減少的TaskTracker內存爲256M和有限的TaskTracker的數量爲1的每個節點,都高的原因孩子的錯誤,並採取了MapReduce工作運行更多的時間。

0

你拿出無論內存配置,Hadoop是可能無論如何拋出此。問題是,對於簡單的文件系統的任務,如創建符號鏈接或檢查可用磁盤空間,Hadoop的叉從向TaskTracker的過程。該進程將擁有與父進程一樣多的內存分配。

典型的方法來防止這個問題是要離開的分配給TT未分配儘可能多的物理內存,增加了一些交換到主機爲這些類型的任務,或允許「過度承諾」。

相關問題