• Hadoop性能调优


    1.Jvm重用

    JVM重用不是指同一Job的两个或两个以上的Task同时运行于同一JVM上,而是 N个Task按顺序在同一个Jvm上运行,即省去了Jvm关闭和再重启的时间。N值可以在Hadoop的mapre-site.xml文件mapreduce.job.jvm.numtasks(默认1)属性进行设置。也可在hive的执行设置:set  mapred.job.reuse.jvm.num.tasks=10;(默认1)

    一个TT最多可以同时运行的task数目由mapred-site.xml中mapreduce.tasktracker.map.tasks.maximummapreduce.tasktracker.reduce.tasks.maximum设置。其他方法,如在JobClient端通过命令行:-D mapred.tasktracker.map.tasks.maximum=number 或者 conf.set("mapred.tasktracker.map.tasks.maximum","number")设置都是【无效的】 

    2.哪些因素影响作业的运行效率?

    mapper的数量:尽量将输入数据切分成数据块的整数倍。如有太多小文件,则考虑CombineFileInputFormat

    reducer的数量:为了达到最高性能,集群中reducer数应该略小于reducer的任务槽数

    combiner使用: 充分使用合并函数减少map和reduce之间传递的数据量,combiner在map后运行

    中间值的压缩:对map输出值进行压缩减少到reduce前的传递量conf.setCompressMapOutput(true)setMapOutputCompressorClass(GzipCodec.class)

    自定义Writable:如果使用自定义的Writable对象或自定义的comparator,则必须确保已实现RawComparator

    调整shuffle参数:MapReduce的shuffle过程可以对一些内存管理的参数进行调整,以弥补性能不足

    3.避免context.write(new Text(),new Text())
    提倡key.set(); value.set(); output.collect(key,value);
    前者会产生大量的Text对象,使用完后Java垃圾回收器会花费大量的时间去收集这些对象

    4.使用DistributedCache加载文件
    比如配置文件,词典,共享文件,避免使用static变量

    5.充分使用Combiner + Parttitioner + Comparator
    Combiner: 对map任务进行本地聚合
    Parttitioner:合适的Parttitioner避免reduce端负载不均
    Comparator:二次排序 

    6.Uber模式
    是Hadoop2.0中实现的一种针对MR小作业的优化机制。即如果作业足够小,则所有task在一个jvm(mrappmaster)中完成要比为每个task启动一个container更划算。下面是该机制的相关参数,这些参数均为客户端配置。

    总开关
    •mapreduce.job.ubertask.enable 默认值:false
    •mapreduce.job.ubertask.maxmaps 最大map数,默认值:9
    •mapreduce.job.ubertask.maxreduces 最大reduce数,默认值:1 (社区2.2.0只支持0或1个reduce)
    •mapreduce.job.ubertask.maxbytes 最大输入字节数,默认值:默认的blocksize,即64MB

    map或reduce的内存需求不大于appmaster的内存需求
    •mapreduce.map.memory.mb (默认值:0) <= yarn.app.mapreduce.am.resource.mb (默认值:1536)
    •mapreduce.reduce.memory.mb (默认值:0) <= yarn.app.mapreduce.am.resource.mb (默认值:1536)

    map或reduce的CPU需求不大于appmaster的CPU需求
    •mapreduce.map.cpu.vcores (默认值:1) <= yarn.app.mapreduce.am.resource.cpu-vcores (默认值:1)
    •mapreduce.reduce.cpu.vcores (默认值:1) <= yarn.app.mapreduce.am.resource.cpu-vcores (默认值:1)
    •mapreduce.job.map.class 不继承于 org.apache.hadoop.mapreduce.lib.chain.ChainMapper
    •mapreduce.job.reduce.class 不继承于 org.apache.hadoop.mapreduce.lib.chain.ChainReducer

  • 相关阅读:
    全排列算法的全面解析
    排序算法系列:插入排序算法
    MySQL多表查询核心优化
    Python代码优化及技巧笔记(二)
    深入理解Lambda
    Unity游戏逻辑服务器实践
    Java设计模式——迭代器模式
    Java设计模式——原型模式
    insert 加的锁
    区间锁
  • 原文地址:https://www.cnblogs.com/skyl/p/4788965.html
Copyright © 2020-2023  润新知