首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop中的OOM异常

Hadoop中的OOM异常
EN

Stack Overflow用户
提问于 2012-10-11 01:52:40
回答 1查看 1.1K关注 0票数 0

我得到了OOM异常(Java堆空间)来减少子级。在还原器中,我将所有的值附加到一个StringBuilder中,这将是还原器过程的输出。值的数目不那么多。我试图将mapred.reduce.child.java.opts的价值提高到5.12亿和1024M,但这并没有帮助。减速机代码如下所示。

代码语言:javascript
复制
            StringBuilder adjVertexStr = new StringBuilder();
        long itcount= 0;
        while(values.hasNext()) {
            adjVertexStr.append(values.next().toString()).append(" ");
            itcount++;
        }
        log.info("Size of iterator: " + itcount);
        multipleOutputs.getCollector("vertex", reporter).collect(key, new Text(""));
        multipleOutputs.getCollector("adjvertex", reporter).collect(adjVertexStr, new Text(""));

在上面的代码中,我得到了3个位置的异常。

  1. 在异常堆栈跟踪中,行号指向附加字符串的while循环语句。
  2. 在最后一行中- collect()语句中。
  3. 我有一个集合来累积所有的值,这样就没有重复的值了。后来我把它拿走了。

迭代器的一些样本大小如下: 238695,1,13,673,1,1,等等,这些不是很大的值。为什么我总是得到OOM异常?任何帮助对我来说都是有价值的。

堆栈跟踪

代码语言:javascript
复制
2012-10-10 21:15:03,929 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 238695                                                                                                   
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 13                                                                                                       
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,191 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,193 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 673                                                                                                       
2012-10-10 21:15:04,195 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1                                                                                                        
2012-10-10 21:15:09,856 INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs`    truncater with mapRetainSize=-1 and reduceRetainSize=-1                                                       
2012-10-10 21:15:09,916 INFO org.apache.hadoop.io.nativeio.NativeIO: Initialized cache for UID to  User mapping with a cache timeout of 14400 seconds.                                                     
2012-10-10 21:15:09,916 INFO org.apache.hadoop.io.nativeio.NativeIO: Got UserName hduser for UID         2006 from the native implementation                                                                      
2012-10-10 21:15:09,922 FATAL org.apache.hadoop.mapred.Child: Error running child :       java.lang.OutOfMemoryError: Java heap space                                                                           
    at java.util.Arrays.copyOf(Arrays.java:2882)                                                                                                                                                      
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)                                                                                                                 
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)                                                                                                                         
    at java.lang.StringBuilder.append(StringBuilder.java:119)                                                                                                                                         
    at partitioning.UndirectedGraphPartitioner$Reduce.reduce(UndirectedGraphPartitioner.java:106)                                                                                            
    at partitioning.UndirectedGraphPartitioner$Reduce.reduce(UndirectedGraphPartitioner.java:82)                                                                                             
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:519)                                                                                                                         
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420)                                                                                                                                   
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)                                                                                                                                           
    at java.security.AccessController.doPrivileged(Native Method)                                                                                                                                     
    at javax.security.auth.Subject.doAs(Subject.java:396)                                                                                                                                             
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)                                                                                                           
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-11 03:07:00

因此,对于您的示例,您希望将特定键的值输出为值的空格分隔列表(作为输出键),并将空文本作为输出值。

用于此的输出格式将按以下方式使用减缩键/值(这将在还原器代码中):

代码语言:javascript
复制
for (Text value : values) {
    multipleOutputs.getCollector("adjvertex", reporter)
       .collect(key, value);
}

然后,实际的recordWriter将使用键作为逻辑触发器:

当传递一个与先前传递的键不同的键时,将关闭正在写入的前一个记录(例如,写一个选项卡,后面跟着一个换行符)。将更新前一个键,并将新值写入输出流。

如果键与前一个键相同,则输出一个空格,然后输出值到输出流。

在记录编写器的close方法中,执行与传递新键相同的逻辑(输出一个制表符,后面跟着换行符)。

希望这是有意义的。唯一需要注意的是,如果您有一个自定义组比较器(这将导致记录编写器中先前的键比较失败)。此外,在更新前一个键跟踪变量时,请记住对键进行深度复制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12831076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档