从Hadoop配置文件深刻理解MapReduce优化

MapReduce优化的入手点

– 合理设定Map/Reduce数量 
– 如果可能,使用Combiner减少中间数据输出 
– 对中间数据和最终结果启用压缩 
– 减少Shuffle过程中写入磁盘的数据 
– 适当增大每个节点的处理任务的并发度
1. 合理设定Map数量

Mapper数量不能直接设定

1.1 可以通过选择BlockSize间接调整Mapper数量

hdfs-site.xml 中

• dfs.blocksize
– 文件Block大小
1.2 压缩输入文件
1.3 重写InputFormat,覆盖getSplits方法
2. 适当选择Reducer数量

Reducer数量由程序指定,默认为1,我们可以提高他,Reducer数量过小导致并发度不够,过大导致Linux频繁进行任务切换,反而不好。
hdfs-site.xml 中

• mapred.reduce.parallel.copies
– Reducer数量

3 如果可能,使用Combiner减少中间数据输出

对中间数据和最终结果启用压缩

# 设定map reduce 之间是否启用压缩
– mapred.compress.map.output = true   :开启压缩
– mapred.map.output.compression.codec = com.hadoop.compression.lzo.LzoCodec  :设定压缩算法

# 最终的输出结果是否启动压缩
– mapred.output.compress = true       :
– mapred.output.compression.codec = com.hadoop.compression.lzo.LzoCodec
– mapred.output.compression.type = BLOCK

4 减少Shuffle到磁盘的数量

这里写图片描述

4.1 io.sort.mb
  • 指定了排序使用的内存
  • 推荐:100 – 不宜过大,否则严重占用系统内存
  • -
4.2 io.sort.spill.percent
  • 指定了排序的内容达到内存(io.sort.mb )的多少比例开始写一个排序文件,清空内存,读取下一段的要排序的内容。
  • 多大比例时开始spill(写磁盘),默认0.80,基本不需要调整
4.3 io.sort.record.percent
  • 指定了排序的头部索引达到内存(io.sort.mb )的多少比例开始写一个排序文件,清空内存,读取下一段的要排序的内容。
  • Kv数组长度与内存量的百分比,默认0.05
4.4 io.sort.factor
  • Reducer侧一次对多少文件进行归并排序,推荐:100
4.5 mapred.job.shuffle.input.buffer.percent
  • Reducer侧的shuffle buffer占其heap的比例
    mapred.reduce.parallel.copies
  • – Reducer侧同时并发拷贝Map结果的数量,推荐20-50

5. 适当增大每个节点的处理任务的并发度

待续。。。

6 其他

› ulimit调高同时打开文件描述符及网络连接、关闭swap
› JVM参数:-XX:+UseConcMarkSweepGC -XX:NewSize=300M -XX:MaxNewSize=300M -XX:+DoEscapeAnalysis -XX:+UseCompressedOops - XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/ - XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly"
› mapreduce.jobtracker.heartbeat.interval.min
› 多盘读写:mapred.local.dir
› 增加rpc handler:mapred.job.tracker.handler.count
› split数量:mapred.min.split.size/mapred.max.split.size
› speculative:mapred.map.tasks.speculative.execution、 mapred.reduce.tasks.speculative.execution
› 任务失败次数:mapred.max.map.failures.percent/reduce, mapred.map.max.attempts/reduce
› 多任务共享VM: mapred.job.reuse.jvm.num.tasks
› 任务超时:mapred.task.timeout
› DistributedCache
› 慢启动:mapred.reduce.slowstart.completed.maps
› 优先级:mapred.job.priority
› 用户端设置:mapred.child.java.opts
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值