1.简单了解mapreduce任务
一个mapreduce任务会启动多种进程,首先需要启动一个客户端进程,客户端进程向rm申请资源启动am(MRAppMaster)进程,然后am根据输入分片向rm申请资源启动Map或Reduce进程。
所以,当发生内存溢出时,必须先弄清楚是哪个进程内存溢出。
2.客户端内存溢出
在任务提交阶段的内存溢出,则是客户端内存溢出,在启动任务前,调整环境变量 HADOOP_CLIENT_OPTS,添加-Xmx选项,该选项可以修改客户端进程的最大堆内存。默认情况,Xmx为128m。
export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"
3.am内存溢出
如果任务提交成功,开始运行后,通过日志判断am内存溢出。通过如下参数调整am堆内存
yarn.app.mapreduce.am.command-opts=-Xmx5000m
#或者
yarn.app.mapreduce.am.resource.mb=5120
4.map内存溢出
mapreduce.map.memory.mb=2048
#或者
mapreduce.map.java.opts=-Xmx2048m
5.reduce内存溢出
mapreduce.reduce.memory.mb=2048
#或者
mapreduce.reduce.java.opts=-Xmx2048m