mapreduce && yarn 常见调优参数
1. mapreduce调优
map调优
- 自定义分区,减少数据倾斜
- 自定义类,继承Partitioner接口,重写getPartition方法;
- 减少溢写次数
- mapreduce.task.io.sort.mb shuffle的环形缓冲区大小,默认100M,可以提高到200M
- mapreduce.map.sort.spill.precent 环形缓冲区溢出的阈值,默认80%,提高到90%
- 增加每次merge合并次数
- mapreduce.task.io.sort.factor 默认10,提高到20
- 在不影响业务结果的前提下提前采用Combiner
- job.setCombinerClass(xxxReducer.class)
- 为了减少磁盘IO, 可以采用Snappy或者LZO压缩
- conf.setBoolean("mapreduce.map.output.compress", true)
- conf.setClass("mapreduce.map.output.compress.codec", SnappyCodec.class,CompressionCodec.class)
- 可以根据128M数据对应1G内存原则提高该内存
- mapreduce.map.memory.mb 默认MapTask内存上限1024MB
- 控制MapTask堆内存大小(内存不够, OOM)
- 默认MapTask的CPU核数1, 计算密集型任务可以增加
- 异常重试
- mapreduce.map.maxattempts 每个Map Task最大重试次数,一旦重试次数超过该值,则认为MapTask运行失败,默认值4.根据机器性能适当提高。
map调优
- reduce去map中拉取数据的并行数,默认5,可以提高到10
- mapreduce.reduce.shuffle.parallelcopies
- buffer大小占Reduce可用内存的比例, 默认0.7.可以提高到0.8
- mapreduce.reduce.shuffle.input.buffer.percent
- buffer中的数据达到多少比例开始写入磁盘。默认0.66,提高到0.75
- mapreduce.reduce.shuffle.merge.percent
- 默认ReduceTask内存上限1024MB, 根据128M数据对应1G内存原则, 适当提高到4-6G
- mapreduce.reduce.memory.mb
- 控制ReduceTask堆内存大小 (不够报OOM)
- mapreduce.reduce.java.opts
- ReuceTask默认的CPU核心数1个.可以提高到2-4个
- mapreduce.reduce.cpu.vcores
- 每个Reduce Task最大重试次数(超过则认为失败。默认为4)
- mapreduce.reduce.maxattempts
- 当MapTask完成的比例达到该值才会为ReduceTask申请资源。默认是0.05
- mapreduce.job.reduce.slowstart.completedmaps
- 如果一个task一段时间内没有读取新数据也没有输出则认为处于Block状态。时间默认值为600000(10分钟).如果程序对每条数据数据处理时间过长,建议调大
- 如果可以不用Reduce, 尽可能不用
2. Yarn调优
Resourcemanager相关
- 处理调度器请求的线程数量
- yarn.resourcemanager.scheduler.client.thread-count ResourceManager
- 配置调度器
- yarn.resourcemanager.scheduler.class
Nodemanager相关
- 使用内存数
- yarn.nodemanager.resource.memory-mb NodeManager
- 为系统保留多少内存,和上一个参数二者取一即可
- yarn.nodemanager.resource.system-reserved-memory-mb NodeManager
- 使用 CPU 核数
- yarn.nodemanager.resource.cpu-vcores NodeManager
- 是否将虚拟核数当作 CPU 核数
- yarn.nodemanager.resource.count-logical-processors-as-cores
- 虚拟核数和物理核数乘数,例如:4 核 8 线程,该参数就应设为 2
- yarn.nodemanager.resource.pcores-vcores-multiplier
- 是否让 yarn 自己检测硬件进行配置
- yarn.nodemanager.resource.detect-hardware-capabilities
- 是否开启物理内存检查限制 container
- yarn.nodemanager.pmem-check-enabled
- 是否开启虚拟内存检查限制 container
- yarn.nodemanager.vmem-check-enabled
- 虚拟内存物理内存比例
- yarn.nodemanager.vmem-pmem-ratio
Container 容器相关
- 容器最小内存
- yarn.scheduler.minimum-allocation-mb
- 容器最大内存
- yarn.scheduler.maximum-allocation-mb
- 容器最小核数
- yarn.scheduler.minimum-allocation-vcores
- 容器最大核数
- yarn.scheduler.maximum-allocation-vcores