hadoop09-hadoop调优(MR优化)

hadoop调优

MR优化

  • 数据输入

    • 合并小文件
      • 除了CombinTextInputFormat还有什么方法合并?
    • 使用CombinTextInputFormat合并小文件
  • Map阶段

    • 减少溢写(spill)次数
    • 减少合并(merge)次数
    • 不影响业务需求下,使用combin处理
  • Reduce阶段

    • 合理设置map和reduce个数:,并不一定是128M如果性能足够好,可以多划分map提高并行处理效率(虽然会有跨节点读数据,但是比单个maptask处理效率要高)

    • 设置map、reduce共存:调整slowstart.completedmaps参数,意思就是在map运行一段时间后,reduce开始从maptask输出的文件拷贝文件到reducetask,减少reduce等待时间

    • 规避使用reduce:因为reduce在拉取数据的时候会从多个节点拉取文件,产生大量的网络消耗。

    • 合理使用reduce端的buffer缓存:因为reduce阶段默认是有一个缓存区存从maptask拷贝的文件,当文件大于缓冲区阈值的时候就会往磁盘写(默认是堆内存的百分比)

      mapreduce reduce input buffer percent,默认为
      0.0.当值大于0的时候,会保留指定比例的内存读Bufe中的数据直接拿给
      Redicet使用。这样一来,设置Buir需要内存,读取数要内存, Reducen
      也要内存,年的运行情兄进行整

  • IO传输

    • 压缩
    • 使用SequenceFile二进制文件
  • 数据倾斜问题

    • 数据频率倾斜
    • 数据大小倾斜
      • 抽样和范围分区
      • 自定义分区 根据抽样合理设置每个分区的大小
      • Map阶段combine
      • 采用map join 尽量避免使用Reduce join
  • 常用的调优参数

mapred-site.xml配置

mapreduce.map.memory.mbmapreduce.reduce.memory.mb

  • 一个MapTask或ReduceTask可使用的资源上限 默认为1024。如果MapTask实际使用的资源量超过该值,则会被强制杀死。

mapreduce.map.cpu.vcoresmapreduce.reduce.cpu.vcores

  • 每个MapTask和ReduceTask可用的cpu核心数

shuffer相关

mapreduce.reduce.shuffle.parallelcopiesmapreduce.reduce.shuffle.merge.percent

  • 每个Reduce去Map中取数据的并行数。默认值是5
  • Reduce的缓冲区Buffer中的数据达到多少比例开始写入磁盘。默认值0.66

mapreduce.reduce.shuffle.input.buffer.percent

  • Buffer大小占Reduce可用内存的比例。默认值0.7

mapreduce.reduce.input.buffer.percent

  • 指定多少比例的内存用来存放Buffer中的数据,默认值是0.0

yarn-site.xml设置

yarn.scheduler.minimum-allocation-mb

  • 给应用程序Container分配的最小内存,默认值:1024

yarn.scheduler.maximum-allocation-mb

  • 给应用程序Container分配的最大内存,默认值:8192

yarn.scheduler.minimum-allocation-vcoresyarn.scheduler.maximum-allocation-vcores

  • 每个Container申请的最小CPU核数,默认值:1
  • 每个Container申请的最大CPU核数,默认值:32

yarn.nodemanager.resource.memory-mb

  • 给Containers分配的最大物理内存,默认值:8192

shuffle关键优化

mapreduce.task.io.sort.mbmapreduce.map.sort.spill.percent

  • 环形缓冲区的容量大小
  • 环形缓冲区的溢出比例,默认80%

容错相关

mapreduce.map.maxattempts

  • MapTask运行的最大重试次数,大于任务运行失败,默认值:4

mapreduce.reduce.maxattempts

  • ReduceTask最大重试次数,同上

mapreduce.task.timeout

  • 避免程序卡死的设置
  • 为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值