shuffle过程的优化
combiner合并
在map阶段提前进行了一次合并,一般来讲等同于提前执行了reduce操作
好处:可以降低reduce的压力
在map阶段的进行合并是并行的(分布式的)
注意:并不是所有的程序都适合combiner:测试
设置combiner之和和之后的结果要一致,不能因为性能优化导致结果不对,A + (B +C) = (A+B) + C
compress压缩
大大减少了磁盘IO以及网络IO
MapReduce有很多地方都可以压缩
输入的就是一个压缩文件
map shuffle中合并成一个大文件,对该文件进行压缩,reduce过来取数据就是压缩之后的数据
reduce输出
Hadoop常见的压缩格式
检查本地库支持哪些压缩:bin/hadoop checknative
修改压缩库,只需要替换native包(在hadoop-2.7.3/lib里)即可
常用的压缩格式:snappy,lzo,lz4
Hadoop中设置压缩
输入: 一般不配置
map的中间结果:
mapreduce.map.output.compress =true;
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.Lz4Codec
压缩方式的寻找:DefaultCodec → 找打该类的目录 → 其他压缩类和他在同一个目录下
reduce输出:
mapreduce.output.fileoutputformat.compress =true;
mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.Lz4Codec
配置方式:
方式一:在main方法中Configuration
方式二:在配置文件中
全局修改,所有MapReduce都生效
方式三:运行的时候通过自定义配置
bin/yarn jar xxx.jar -DXX=yy -Daa=bb MianClass input_path output_Path
检查是否配置成功:
方式一:
hpsk01.huadian.com:50070 → Configuration → 查看对应配置参数
配置前:
配置后:
方拾二:查看计数器
配置前:
配置后: