我向 MapReduce 作业中的 FileInputFormat 提供逗号分隔的文件名。我的数据总大小是 30Gb 压缩的 snappy orc 文件。
当我的 MapReduce 作业在 30 秒后立即启动时,它失败并出现 OOM 错误
2024-07-31 00:59:02,572 致命[主要] org.apache.hadoop.mapreduce.v2.app.MRAppMaster:启动 MRAppMaster 时出错 java.lang.OutOfMemoryError:Java堆空间 在 java.util.Arrays.copyOf(Arrays.java:3332) 在java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) 在 java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448) 在 java.lang.StringBuffer.append(StringBuffer.java:270) 在 org.apache.xerces.dom.DeferredDocumentImpl.getNodeValueString(来源未知) 在 org.apache.xerces.dom.DeferredDocumentImpl.getNodeValueString(来源未知) 在 org.apache.xerces.dom.DeferredTextImpl.synchronizeData(来源未知) 在 org.apache.xerces.dom.CharacterDataImpl.getData(来源未知) 在org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2775) 在org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2663) 在 org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2559) 在 org.apache.hadoop.conf.Configuration.get(Configuration.java:1340) 在 org.apache.hadoop.mapreduce.v2.util.MRWebAppUtil.initialize(MRWebAppUtil.java:51) 在 org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1498)
MapReduce作业是尝试将完整的输入数据加载到内存中并运行还是逐个文件执行??
我尝试了以下参数,但没有帮助
mapreduce.reduce.memory.mb=15360
mapreduce.map.memory.mb=10240
mapreduce.reduce.java.opts=-Xms14g -Xmx14g -Djava.net.preferIPv4Stack=true -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc
mapreduce.map.java.opts=-Xms9g -Xmx9g -Djava.net.preferIPv4Stack=true -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc
yarn.app.mapreduce.am.resource.mb=81920
yarn.app.mapreduce.am.command-opts=-Xms77g -Xmx77g -Djava.net.preferIPv4Stack=true -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc
我使用的hadoop版本:Hadoop 2.6.0-cdh5.16.1
添加command-opts参数后解决
yarn.app.mapreduce.am.resource.mb=6144
yarn.app.mapreduce.am.command-opts=-Xms3g -Xmx5g