牛骨文教育服务平台(让学习变的简单)
博文笔记

运行大作业(文件数目多)时需要注意的参数

创建时间:2015-03-12 投稿人: 浏览次数:1563

运行大作业(文件数目多)时需要注意的参数:

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/

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。