Hadoop组件MR的执行流程

MapTask首先根据文件大小切片,执行Map逻辑转换数据并写入环形缓冲区,当达到一定比例时触发溢写,进行分区排序和可能的规约操作。ReduceTask则从MapTask拉取数据,进行内存或磁盘上的排序合并,然后按key分组执行reduce逻辑,最终输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapTask执行流程: (Mapshuffle: 分区 排序 规约)
1- MapTask开始读取数据, 在读取数据的时候, 会根据文件大小的对文件数据逻辑切片, 默认按照128M进行切片, 有多少个片,最终就会有多少个MapTask来执行, 形成k1 v1 , k1表示行的起始偏移量 v1表示的每一行的数据
2- 开始执行Map逻辑(自定义)处理 , 接收k1v1 将其转换为 k2v2
3- 将转换后的k2v2写入的环形缓冲区(默认:100M),随着不断的写入, 环形缓冲区的数据会越来越多
4- 当缓冲区中数据达到80%的时候, 就会触发溢写的机制, 将数据溢写到磁盘上, 形成一个小文件,在溢写的过程中, 会对数据进行分区操作(给每一条数据打上分区的标记),同时对数据排序操作, 如果设置了规约(combiner)也会在此时来运行的
5- MapTask执行完成后, 将缓冲池区最后一部分数据全部溢写出来, 开始对数据进行合并操作, 形成一个最终的结果文件即可, 在合并的过程中, 依然会存在排序和规约的操作, 形成的结果文件就是分区好 排好序 规好约的结果数据
reduceTask执行流程: (reduceshuffle: 分组)
1- 各个reduceTaskMapTask中拉取属于自己分区的数据,在拉取的过程中, 也是先将其拉取到内存中, 如果内存不足将其溢写到磁盘上, 最后对数据进行排序合并操作 (排序的目的就是为了能够更好进行分组操作)
2- 对数据进行分组操作, 将相同key的数据放置在一起, 分好一组数据, 就会触发执行一次reduce的逻辑,k2v2转换为k3v3
3- 结果进行输出, 直到将所有的分组全部处理完成, 整个reduce的操作也就全部的结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值