MapReduce运行原理

MapReduce的工作流程包括split阶段、map阶段、shuffle阶段和reduce阶段。split阶段将大文件拆分成InputSplit,每个对应一个MapTask。map阶段执行Mapper类的map函数。shuffle阶段将map的输出数据分区排序,准备传递给reduce阶段。reduce阶段则根据key进行聚合操作。切片规则依据文件大小和HDFS块大小确定,影响MapTask的数量。MapTask的并行度和ReduceTask的数量直接影响作业的处理速度和数据分布。
摘要由CSDN通过智能技术生成

1、MapReduce工作流程

流程示意图:
在这里插入图片描述

1.1 split 阶段

  • 首先 mapreduce 会根据要运行的大文件来进行 split,每个输入分片(inputsplit)针对一个 map
    任务,输入分片(InputSplit)存储的并非数据本身,而是一个分片长度和一个记录数据位置的数组。
  • 输入分片(InputSplit)通常和 HDFS 的 block(块)关系很密切,假如我们设定 HDFS 的块的大小是
    128MB,我们运行的大文件是128x10MB,MapReduce 会分为 10 个 MapTask,每个 MapTask
    都尽可能运行在block(块)所在的 DataNode 上,体现了移动计算不移动数据的思想。

1.2 map 阶段

  • map 阶段就是执行自己编写的 Mapper 类中的 map 函数,Map 过程开始处理,MapTask 会接受输入分片,通过不断的调用map()方法对数据进行处理。处理完毕后,转换为新的<KEY,VALUE>键值对输出。

1.3 Shuffle 阶段(面试重点)

  • shuffle 阶段主要负责将 map 端生成的数据传递给 reduce 端,因此 shuffle 分为在 map 端的过程和在reduce 端的执行过程。具体过程如下:
    • (1)MapTask 收集map()方法的输出<KEY,VALUE>对,放到内存缓冲区(称为环形缓冲区)中,其中环形缓冲区的大小默认是100MB。
    • (2)环形缓冲区到达一定阈值(环形缓冲区大小的 80%)时,会将缓冲区中的数据溢出本地磁盘文件,这个过程中可能会溢出多个文件。
    • (3)多个溢出文件会被合并成大的溢出文件。
    • (4)在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对 key 进行排序 sort。
    • (5)合并成大文件后,Map 端 shuffle 的过程也就结束了,后面进入 reduce 端 shuffle 的过程。
    • (6)在 Reduce 端,shuffle 主要分为复制 Map 输出(copy)、排序合并(Merge Sort)两个阶段。
  • Reduce 任务通过 HTTP 向各个 Map 任务拖取它所需要的数据。
  • Copy 过来的数据会先放入内存缓冲区中,如果内存缓冲区中能放得下这次 数据的话就直接把数据写到内存中,即内存到内存merge。Reduce 要向每个 Map 去拖取数据,在内存中每个 Map 对应一块数据,当内存缓存区中存储的 Map 数据占用空间达到一定程度的时候,开始启动内存中 merge,把内存中的数据 merge 输出到磁盘上一个文件中,即内存到磁盘 merge。
  • 当属于该 re
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值