MapReduce的正确流程顺序
1、作业提交(Job Submission):
用户通过客户端提交 MapReduce 作业,指定输入数据、输出位置、Map 和 Reduce 函数等配置参数。
2、作业初始化(Job Initialization):
资源管理器接收作业请求并启动作业管理器(如 YARN 的 ApplicationMaster),负责分解作业并为每个任务申请资源。
3、任务分配(Task Assignment):
作业管理器将作业分解成多个 Map 和 Reduce 任务,资源管理器根据资源情况分配容器来执行这些任务。
4、Map 阶段(Map Phase):
输入分片(Input Splitting):输入数据集被分成若干个数据分片,每个分片通常对应一个 Map 任务。
Map 任务执行:每个 Map 任务处理一个输入分片,读取输入数据并产生中间键值对(keyvalue pairs),进行分区计算,确定每个键值对应该发送到哪个 Reducer。
本地排序(InMemory Sort):Map 任务在本地内存中对输出的中间键值对进行排序,如果数据超过内存限制,会溢出到磁盘并进行合并和排序。
5、Shuffle 和 Sort 阶段(Shuffle and Sort Phase):
Shuffle:计算好分区号之后,Map 任务会根据分区号对中间键值对进行排序。
Sort:Reducer 接收到来自多个 Mapper 的中间数据后,会进行基于键的全局排序,确保相同键的所有值聚集在一起。
6、Reduce 阶段(Reduce Phase):
每个 Reduce 任务接收到排序后的中间数据,调用 Reduce 函数处理每个键及其对应的值,最终产生输出键值对。
7、输出阶段(Output Phase):
Reduce 任务的输出被写入到指定的输出位置,通常是分布式文件系统,如 HDFS。
8、作业完成(Job Completion):
当所有的 Map 和 Reduce 任务都完成后,作业管理器向资源管理器报告作业完成状态,客户端可以查询作业的状态和统计信息。
FAQs
1、什么是 Shuffle 和 Sort 阶段?它们的作用是什么?
回答:Shuffle 和 Sort 阶段是 MapReduce 过程中的一个关键步骤,发生在 Map 阶段之后和 Reduce 阶段之前,Shuffle 是指将 Map 任务的输出数据按照键(key)进行分区和排序,并将这些数据分发到相应的 Reducer,Sort 是指在每个 Reducer 节点上对接收到的数据进行全局排序,以确保具有相同键的所有值都聚集在一起,为接下来的 Reduce 阶段做好准备。
2、MapReduce 中的“溢写”操作是如何进行的?
回答:在 MapReduce 的 Map 阶段,Map 任务在本地内存中对输出的中间键值对进行排序,如果输出数据超过内存限制(默认缓冲区大小为100MB,存储阈值为80%),会触发溢写(spill)操作,这个操作会把环形缓冲区中的数据写入磁盘文件中,这个过程被称为溢写文件,在 Map 任务结束之后,这些溢写文件会被合并成为一个或少量文件,以便后续的 Shuffle 和 Sort 阶段处理。