5.6 Task内存

操作场景:

默认情况下,每个Map和Reduce使用的最大内存都是4GB,堆内存是3GB。

原因如下: (这里澄清一点:虽然分配了4G,但有时候任务实际可能只会到2G,所以yarn上看是用了4G,而实际只使用了2G)

  1. hive当前每个map处理的数据量是这个参数mapreduce.input.fileinputformat.split.maxsize控制的, 默认是256MB, 通常情况下,这个256MB是压缩文件,由于压缩文件压缩率不定,解压后数据量不同,对内存就会有不同的需求

  2. Hive有Mapjoin, Mapjoin是把小表加载到Map的内存中, 需要估计好加载后的内存,防止加载到内存过大导致内存溢出

  3. 数据可能有些微的倾斜情况,导致Reduce等处理的数据量变大,如果内存小会导致失败

  4. 对于大内存机器,可以尽量使用大的内存降低从内存刷磁盘的频率,这样可以减少IO。正确的做法应该是基于job的情况设置合适的内存,但是考虑到这样业务就需要花费更多的时间去调优, 因此配置成一个更大一点,更通用的值,保证job运行的稳定性。

修改参数:

参数名 描述
mapreduce.map.memory.mb 默认4096,Map的YARN内存申请数量,单位MB
mapreduce.reduce.memory.mb 默认4096,Reduce的YARN内存申请数量,单位mb
mapreduce.map.java.opts 默认-Xmx2048M -Djava.net.preferIPv4Stack=true,Map的java堆大小
mapreduce.reduce.java.opts 默认-Xmx3276M -Djava.net.preferIPv4Stack=true,Reduce的java堆大小
yarn.app.mapreduce.am.resource.mb 默认1536,MapReduce引擎下,AM占用的YARN内存资源总数,必须不小于堆大小设置
yarn.app.mapreduce.am.command-opts 默认值-Xmx1024m -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -verbose:gc,任务task数很多时,比如task超过3万时,需要考虑增加AM的内存,以免AM由于内存不足拖慢整个任务,可以把Xmx改成3072m;MapReduce引擎下,AM 堆大小设置

results matching ""

    No results matching ""