MapReduce一些优化配置(尝试)

最近在阅读hadoop MapReduce的一些配置,以后工作中可以逐步尝试下。

  1. 整个MapReduce的核心部分就是在shuffle部分,根据输入文件确定好map后,每一个map都会有一个buffer(in memory),这样以流的方式读取文件,当buffer达到一个阈值时,输入到文件,这样map阶段先回产生一堆spill文件,并且后台进程保证他们按照key有序,最后将它们合并成一个有序(这点有点疑惑,这个文件分区内key是有序的吗?那么这里排序了两次?)的分区的文件。mapreduce.task.io.sort.mb控制buffer的容量,mapreduce.map.sort.spill.percent控制阈值。
  2. 当map task结束时,会有多个分割的文件,在task结束前,会将这些spill文件合并到一起,有序,分区的。参数mapreduce.task.io.sort.factor不仅控制了merge的最大流的数量,同时也控制了随后各个map的文件合并的情况,例如途中每2个merger文件合并一个文件。如果有50个map,factor为10。那么最后会产生5个文件给reduce。
  3. mapreduce.map.output.compress=true,mapreduce.map.output.compress.codec配置压缩编码。
  4. mapreduce.reduce.shuffle.input.buffer.percent:Map的输出会被复制到,reduce task的JVM的内存中,如果它们足够小的话。这个参数控制了jvm中的head的多少比例可以被用来作为buffer的容量。同时,mapreduce.reduce.shuffle.merge.percent控制这个阈值
  5. mapreduce.job.reduce.slowstart.completedmaps多少比例的map任务完成后,开始reduce。

 

posted @ 2016-08-09 18:09  dalu610  阅读(212)  评论(0编辑  收藏  举报