MapReduce的Shuffle过程

整个MapReduce的运行过程

input --> map --> shuffle -->reduce --->output

以wordcount数据模型为例

Map的输出数据模式如下:<hadoop,1><spark,1>以<key,value>对的形式存在

因为map阶段是对整个文件中的每一个元素进行处理,对于Map的输出量是很大的。

Shuffle阶段

1>Map的数据会写入到内存(环形缓冲区:默认大小:100m),当数据达到缓冲区总容量的80%(阈值)的时候,会将数据spill到本地磁盘

  • 分区(partitioner)分区决定map输出的数据将会被哪个reduce任务进行处理。
    因为分区的数目对应了reduce的数量
  • 排序  
    对分区中的数据排序
  • spill写到本地磁盘
    将内存中的数据写入到本地磁盘(hadoop.tmp.dir对应的目录)

2>当Map阶段数据处理完成之后,会将spill到磁盘的数据进行合并

在1中提到,每次数据达到缓冲区容量的阈值时,会将数据spilll到磁盘,此时会在该目录下产生很多小文件

  • 将各个分区的数据合并到一起
  • 分区合并后再次排序

3>当map阶段数据处理完成之后,各个reduce任务主动到已经完成的map任务的本地磁盘中去拉去属于自己要处理的数据,最后形成一个文件

  • reduce对应partition写入到内存,根据reduce端数据内存的阈值,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值