运行大作业(文件数目多)时需要注意的参数
运行大作业(文件数目多)时需要注意的参数:
Hadoop2 采用Yarn管理作业,与Hadoop1不同的是,Hadoop2会控制每个任务的内存数量。因此,当作业执行失败时,可根据报错信息调整以下参数
参数一: AM内存
- MR_ApplicationMaster占用的内存量。如果一个作业的map过多,可能导致am内存溢出,进而作业失败。
- conf.set("yarn.app.mapreduce.am.resource.mb", "3000"); 单位MB. 超过5万个map任务时,建议设为3000以上
- conf.set("yarn.app.mapreduce.am.command-opts", "-Djava.net.preferIPv4Stack=true -Xmx2125955249"); 单位字节,一般设为上一个值的70%
- 还有一个参数mapreduce.job.split.metainfo.maxsize,这是是文件分片的存储空间,建议设为-1,不对其进行限制
- Map数太多时,还有一种办法可以有效减少Map数,从而大大降低资源消耗,缩短执行时间,见本文末尾
参数二:Mapper/Reducer内存
- Mapper/Reducer内存由两个参数控制。一个是java.opts,代表java进程内存,用于java作业,以及hadoop系统任务,比如排序等;另一个是memory.mb,代表任务总内存,包括java进程内存以及非java内存,比如streaming中的python进程。一般前一个值设为后一个的70%
- 如果运行过程中Mapper/reduce因内存超量被杀死,或者报OOM,尝试调大以上两个参数。
- map java内存:conf.set("mapreduce.map.java.opts", "-Djava.net.preferIPv4Stack=true -Xmx1625955249"); 单位字节
- map总内存:conf.set("mapreduce.map.memory.mb", "2000"); 单位MB
- reduce java内存:conf.set("mapreduce.reduce.java.opts", "-Djava.net.preferIPv4Stack=true -Xmx1625955249");单位字节
- reduce 总内存:conf.set("mapreduce.reduce.memory.mb", "2000"); 单位MB
参数三:虚拟内存
- Yarn同时会监控任务虚拟内存用量,如果超量,同样会杀死任务
- 每单位的物理内存总量对应的虚拟内存量,默认是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。
- conf.set("yarn.nodemanager.vmem-pmem-ratio", "2.1"); 如果内存够用而虚存超量,则可以调大改参数
参数四:运行队列
- Hadoop2.* 的集群对用户队列进行资源配额限制。请大家根据自己的业务设置队列,以免对其他用户的作业造成影响。
- 队列参数为:mapred.job.queue.name
- hive队列设置参数:set mapred.queue.name=hadoop; set mapred.job.queue.name=hadoop;
参数五:map切片大小
- 用户需要根据自己作业的大小对参数mapred.min.split.size和mapred.max.split.size进行调整。min越大,map数量越少;max越小,map数越多。
- 用户根据自己队列资源分配上限和具体集群使用情况进行调节。
大作业优化建议
对于大作业(Map数超过5万),建议采用输入文件合并,可利用少量Map处理多个输入split,从而减少对Yarn的资源要求,减少调度开销,加快执行过程。- job.setInputFormatClass(CombinInputFormat.class);
- 重写InputFormat类,使得多个小文件共用一个map。
一个例子
- mapreduce.map.maxattempts=3
- mapreduce.reduce.maxattempts=2
- yarn.resourcemanager.am.max-retries=2
- mapreduce.map.failures.maxpercent=20
- mapreduce.job.queuename="amap"
- mapreduce.map.memory.mb=1024
- mapreduce.map.java.opts="-Xmx725955249"
- mapreduce.reduce.memory.mb=1024
- mapreduce.reduce.java.opts="-Xmx725955249"
- yarn.app.mapreduce.am.command-opts="-Xmx3000000000"
- yarn.app.mapreduce.am.resource.mb=5000
- mapreduce.job.split.metainfo.maxsize=-1
参考文档 http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-mapreduce/
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。