Hadoop笔记之map &&shuffle && reduce 工作流程图及其分析

       与其说shuffle为mapreduce之间的独立处理函数 不如说是map中数据输入reduce一通道,因为shuffle一部分属于对map task  另一部分为reduce task




Map函数产生输出时,为了保证I/O效率,采用了先写到内存的环形缓冲区,并做一次预排序,每个Map任务都有一个环形内存缓冲区,(默认大小100MB),一旦缓冲区内数据达到80%(默认比例)的阈值后台程序做两件事

        一将缓冲区的内容溢写到磁盘分区中( 在写磁盘之前,线程会跟据数据最终要传达的到Reducer把缓冲区划分(默认按照键)相应的分区.每个分区中,后台线程按键进行内排序.此时如果有一个Combiner.它会在排序后的输出上运行.),在写磁盘的过程中,map函数的输出继续写到缓冲区,直到填满阻塞.

      二是新建一个溢出文件,因此在Map任务写完其最后一个输出记录后,会有若干溢出写文件( 如果已经指定Combiner且溢出次数至少为3时,Combiner就会在输出的文件写到磁盘之前运行,不会影响输出结果.Combiner意义在于使Map的输出的中间结果更加紧凑,使得写到本地磁盘和传给Reducer的数据更少(减少网络传输压力,提高数据的传输效率).在Map任务完成之前,溢出写文件被合并成一个已分区且已排序的文件作为map的中间结果,也就是map任务的输出结果.

     另外为了提高磁盘I/O性能,可以考虑压缩map的输出,这样会让磁盘写的速度更快,节约磁盘空间从而使传给Reducer的数据量减少.默认情况不压缩的.


shuffle即是数据的清洗,它是消化从map传到Reducer过程中的数据.

     如上面所述,map的任务输出结果运行Map任务的TaskTracker所在的结点的本地磁盘上,TaskTracker需要为map输出数据,一个map输出的数据为Reducer一个数据输入分区.由于每个map任务完成的时间不同,所以一旦有一个map的任务被完成,Reducer任务就开始复制其输入,这就是shuffle的Copy阶段,复制完成map的输出,shuffle进入sort排序阶段.此阶段合并map的输出文件.如果有有50个map输出文件,而合并因子为10,合并操作将进行5此,每次将10个文件合并成一个,最终得到5个文件,由于这5个文件不满合并条件(小于合并因子10),则不会合并,直接把5个文件交给reducer函数处理.至此,shuffle阶段完成.


从shuffle的过程可以看出,Map任务处理的是一个InputSplit,二Reduce任务处理的是所有Map任务同一个分区的中间结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值