hadoop之shuffle------>MapReduce的心脏i

本文深入解析了Hadoop中Shuffle的工作原理,包括Mapper端的数据处理流程、Reducer端的数据拉取过程以及整个过程中涉及的重要概念,如环形缓冲区、分区、排序等。

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

一 、shuffle简介

   什么是shuffle

    一句话:Reducer端获取Mapper端的数据的过程

二、shuffle工作流程

 

1.Map读取输入文件

------>进行map计算

------>Mapper将数据写入到环形缓冲区

  注意:1.一个Mapper对应一个环形缓冲区

   2.环形缓冲区存在于内存中,默认100M,mappered-site.xml中可以配置值

------>当环形缓冲区中内容超过80%(默认阈值时0.8)时,后台线程开始把内容写向磁盘的小文件中(spill过程)

------>当一个小文件满了之后,开始写向下一个小文件

      注意:写向磁盘的小文件之前会对Mapper中数据进行Partitioner分区(HashPartitioner)

---> 小文件中对每个分区按照分区号进行排序'

--->再对小文件中每个分区中的内容按键(key)进行内排序,
  ---> 如果有combiner(combiner可有可无),则会在排序后进行combiner运算

------>然后将所有小文件合并成一个大文件,相同分区号的进行合并

------>合并成一个大文件后再次进行排序
        最终得到一个分区且排序的大文件,Mapper的任务完成


2.每个Reducer对应一个分区号,(0号Reducer对应0号分区的内容,1号Reducer对应1号分区的内容......)
------>  Ruducer从大文件中去读取相应分区的文件

------>(每个Mapper会产生一个大文件,故读取后会到很多文件)然后进行合并

------>排序
------>给Reducer计算
------>输出


三 、shuffle拉取数据过程

   在上文中提到“Ruducer从大文件中去读取相应分区的文件”,那么问题来了,那么多map产生的文件,reducer如何知道去哪一个map中的哪一个分区中去拉取数据呢?


 ResourceManager会告诉NodeManager开始工作

------>NodeManager此时启动子进程yarnChild

------>ResourceManager会与MrAppMaster进行RPC通信,(MrAppMaster会分配到其中一个yarnChild所在的机器上)ResourceManager要求MrAppMaster启动任务监控进程

------>MrAppMaster会向ResourceManager申请资源

------>MrAppMaster会启动yarnChild子进程开始进行工作

------>执行Map任务的yarnChild会向MrAppMaster汇报输出信息(如Mapper完成后的数据存储在哪台机器,哪个分区,每个分区的偏移量等映射关系)

------>其他机器的Reducer会向MrAppMaster询问这种映射关系

------>根据映射关系,Reducer知道去哪台机器,哪个分区,哪个偏移量中获取数据

------>开始去相应的分区中下载数据,进行Reducer计算



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值