Scheduler
- 并行
Map任务splitting and sharding dataMap任务相互独立
- 将数据从
Map传输到Reduce- 相同
key的Map输出会分配给同一个Reduce任务 - 利用了
partition函数,比如hash(key) % number_of_reducers
- 相同
- 并行
Reduce任务Reduce任务相互独立
- 实现存储
- 数据通常会有三个副本位于三个不同的服务器上
Map Input: 来自分布式文件系统Map Output:Map节点的本地磁盘(本地文件系统)- 中间数据对外部用户不可见,也不必写到分布式文件系统上
Reduce Input: 远程磁盘(本地文件系统)Reduce Output: 分布式文件系统
理论上,Reduce阶段只能在所有Map阶段结束之后启动(未结束的Map任务可能产生新的key/value对,对应该key的Reduce任务需要等待Map完成)。这种两个阶段之间的隔离操作叫做barrier。
<br>
事实上部分Reduce任务是可以提早开始的。MapReduce中也是这样实现的。但是这种操作不利于我们理解MapReduce范式,所以我们先忽略这件事。
Barrier不成立的原因之一,是在Map阶段和Reduce阶段之间存在Shuffle阶段。Shuffle可以和Map并行执行。
PS.推荐两篇文章《MapReduce:详解Shuffle过程》《MapReduce的shuffle过程详解(分片、分区、合并、归并)》,对这段shuffle的梳理实在是妙。大致解释一下: <br>
Map任务的结果不会立刻写入磁盘,而是写到一个叫环形内存缓冲区的地方(这个操作叫spill)。spill的时候,会根据key进行分区(partition)。缓冲区默认最大是100M,当写入达到阈值(默认是80%)的时候,会启动一个线程将缓冲区文件写到磁盘临时文件。而这个线程会执行一个排序(sort)和一个合并(combine)操作。整个spill执行完之后,会对所有临时文件进行归并(merge)。merge时会继续进行sort和combine来减少最终输出大小。<br>
上面这段流程就是map端的shuffle操作,里面的combine是可选的,部分情况下其实执行的是reduce。

所以,spill时首先进行partition,然后partition内sort、combine,最后写出到磁盘。而combine可以是reduce,所以Map和Reduce之间不存在Barrier。
YARN
YARN = Yet Another Resource Negotiator. YARN是从Hadoop 2.x 开始引入的资源调度器。
YARN将每个服务器看成一组容器(container)。Container = some CPU + some memory。每个容器可以执行一个任务
如果服务器有4个CPU和4GB内存,而每个容器中有一个CPU和1GB的RAM。那么这个服务器有4个容器,可以运行四个任务。
YARN有三个主要部分:
Resource Manager资源管理器RMResource Manager是全局进程- 负责调度
Node Manager节点管理器NMNode Manager在每个server都有一个- 作为守护进程和运行特定服务器进程(比如,任务监控)
Application Master应用管理AM- 应用级别
per-application(job) - 负责
container与Resource Manager、Node Manager之间协商通信 - 与
Node Manager通信,检测任务挂起和重新调度
- 应用级别
YARN分配container

两台服务器A、B:每个服务器有一个Node Manager在运行<br>
两个任务1、2:每个任务有一个Application Master<br>
全局有一个Resource Manager在运行<br>
Timeline:
| sequence | environment | action |
|---|---|---|
| 0 | 开始时,Job2(App2)刚刚运行结束,Job1(App1)即将启动 | N/A |
| 1 | Job1(App1)即将启动 | Application Master1(AM_1)通知Resource Manager(RM) <App1即将启动,需要分配一个container> |
| 2 | RM收到AM_1的消息,但无可分配的container | RM将AM_1消息放入队列挂起,随后Node Manager B(NM_B)向RM发送消息 <container空闲> |
| 3 | RM收到NM_2的消息 | RM通知AM_1, node B有空闲container |
| 4 | AM_1收到RM消息 | AM_1通知NM_B执行Job1 |
实际运行中,每个任务会申请多个container,Resource Manager会根据申请的顺序分配container
本文详细介绍了MapReduce的工作原理,包括Map和Reduce任务的并行执行、数据的shuffle过程,以及YARN资源调度机制。揭示了MapReduce如何通过partition、sort和combine操作优化数据处理,同时阐述了YARN如何管理和分配集群资源。
133

被折叠的 条评论
为什么被折叠?



