[关闭]
@Arslan6and6 2016-08-29T02:34:20.000000Z 字数 679 阅读 636

shuffle理解

mapreduce


map端

  1. 1.maptask将数据写入内存环形缓冲区
  2. 2.持续写入,数据从内存环形缓冲区溢出,根据不同reduce分区,在分区中排序,以减轻reduce排序负担
  3. job.setPartitionerClass(cls)
  4. job.setSortComparatorClsss(cls)
  5. 3.将不同次数溢写的生成的小文件按分区合并成大文件 得到如 <hadoop,1> <hadoop,1> <hadoop, 1>的map端输出数据

reduce端

  1. 4.将不同map端数据按分区copyreduce端,在每个reduce端合并成一个大文件
  2. 5.将每个reduce端的数据进行排序
  3. 6.件排序后的数据按照key分组,value组合在一起 得到如 <hadoop, (1, 1, 1)> 数据 输出给reducetask
  4. job.setGroupingComparatorClass(cls)
  1. combine map端) 一个maptask中的 key相同数据合并,
  2. 如词频统计<world, 1>,<world, 1> 合并成 <world, 2>
  3. 取最大值<a, 23>,<a, 78> 合并成 <a, 78>
  4. --map端的reduce(合并)操作
  5. --不是所有程序都适合(求平均值)
  6. job.setCombinerClass(cls) 看实际情况能否传入reduce
  7. compress 传输给reduce端前压缩,传输到reduce端数据量减少
  8. 1vi mapred-site.xml (全局生效)
  9. 2configuration.set(mapreduce.map.output.compress,true)

image_1aqre201ct9n1k0c4ul1v621spt9.png-61.1kB
image_1aqre2tnq1kop1rmsio81tckm5am.png-389.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注