MapReduce的详细运行阶段

在这里插入图片描述①②③④
map task读文件,通过TextInputFormat读文本切片,一次读一行,返回(key,value);


上一步获取的(key,value)键值对经过map方法逻辑处理成新的(key,value)键值对,通过context.write输出到OutputCollectior收集器

shuffle阶段

OutputCollectior把手机的(key,value)键值对写入到环形缓冲区中,环形缓冲区默认大小为100M,当写到80%时就会触发spill溢写


在溢写之前会对数据进行分区和排序,会对环形缓冲区里面的每个(key,value)键值对hash一个partition值,相同partition值为同一分区,并按照key排序(快排)


将环形缓冲区排序后的内存数据不断溢写都本地磁盘,如果map阶段处理的数据较大,可能会溢写多个文件
(80M 一个块默认128M 正常溢写两个文件 但逻辑块可能大于128M 造成溢写超过两个)


多个溢写的文件被merge合并成大文件(归并排序),此时map task最终结果文件是分区且区内有序


reduce task根据自己的分区号,去各个map task节点拷贝相同partition的数据到reduce task本地磁盘工作目录

①①
reduce task 会把同一分区的来自不同map task的结果文件,再进行merge合并成一个大文件(归并排序),大文件内容按照k有序排列

shuffle阶段结束

①② ①③
进入reduce task的逻辑运算过程,首先调用GroupingComparator对大文件的数组进行分组,从文件中每次取出一组(k,value)键值对,调用用户自定义reduce()方法进行逻辑处理

①④ ①⑤
通过OutPutFormat方法将结果数据写到hdfs part-r-000*文件中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值