设置reduce数量
默认情况下,一个块对应一个map。
默认情况下只有一个reduce。
设置reduce个数:
job.setNumReduceTasks(2); //设置reduce的个数
或者
conf.set("mapreduce.job.reduces", "2"); //设置reduce的个数
实际中reduce的个数要进行不断的测试获取一个趋于平稳的值。
map任务的输出压缩
Configuration conf = getConf();
conf.set("mapreduce.map.output.compress", "true");//设置开启压缩,默认为false
conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.Lz4Codec");//设置压缩算法,CompressionCodec为压缩算法的父类
// CompressionCodec
shuffle参数的设置
job.setPartitionerClass(cls); //设置分区
job.setSortComparatorClass(cls); //设置排序
job.setCombinerClass(cls); //设置combiner
job.setGroupingComparatorClass(cls); //设置group
设置排序因子:
map输出的结果在本地多个小文件,排序因子就是设置当小文件数量达到多少的时候进行文件的合并。
mapreduce.task.io.sort.factor 默认10
设置内存缓冲区:
map输出数据的时候先将数据放在内存缓冲区,此参数设置内存缓冲区的大小,当不需要将数据先放内存,而是直接写到磁盘,可以将这个值调小
mapreduce.task.io.sort.mb 默认100M
设置内存缓冲使用百分比:
map输出数据的时候先将数据放在内存缓冲区,当缓冲区的数据量达到总数量的百分多少的时候将数据写入磁盘,这个参数就是用来控制数据写出时的百分比。
mapreduce.map.sort.spill.percent 默认0.8
设置每个map任务和每个reduce任务运行时使用的虚拟CPU数量:
mapreduce.map.cpu.vcores 默认1
mapreduce.reduce.cpu.vcores 默认1