Map
任务
splitting and sharding data
Map
任务相互独立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
。node
事实上部分Reduce
任务是能够提前开始的。MapReduce
中也是这样实现的。可是这种操做不利于咱们理解MapReduce
范式,因此咱们先忽略这件事。服务器
Barrier
不成立的缘由之一,是在Map
阶段和Reduce
阶段之间存在Shuffle
阶段。Shuffle
能够和Map
并行执行。app
PS.推荐两篇文章《MapReduce:详解Shuffle过程》《MapReduce的shuffle过程详解(分片、分区、合并、归并)》,对这段shuffle的梳理实在是妙。大体解释一下:
Map任务的结果不会马上写入磁盘,而是写到一个叫环形内存缓冲区的地方(这个操做叫spill
)。spill
的时候,会根据key进行分区(partition)
。缓冲区默认最大是100M
,当写入达到阈值(默认是80%
)的时候,会启动一个线程将缓冲区文件写到磁盘临时文件。而这个线程会执行一个排序(sort)
和一个合并(combine)
操做。整个spill执行完以后,会对全部临时文件进行归并(merge)
。merge
时会继续进行sort
和combine
来减小最终输出大小。
上面这段流程就是map
端的shuffle
操做,里面的combine
是可选的,部分状况下其实执行的是reduce
。分布式
因此,spill
时首先进行partition
,而后partition
内sort
、combine
,最后写出到磁盘。而combine
能够是reduce
,因此Map
和Reduce
之间不存在Barrier
。函数
YARN = Yet Another Resource Negotiator
. YARN
是从Hadoop 2.x
开始引入的资源调度器。oop
YARN
将每一个服务器当作一组容器(container)
。Container = some CPU + some memory
。每一个容器能够执行一个任务.net
若是服务器有4个CPU和4GB内存,而每一个容器中有一个CPU和1GB的RAM。那么这个服务器有4个容器,能够运行四个任务。线程
YARN有三个主要部分:code
Resource Manager
资源管理器 RM
Resource Manager
是全局进程Node Manager
节点管理器 NM
Node Manager
在每一个server
都有一个Application Master
应用管理AM
per-application(job)
container
与Resource Manager
、Node Manager
之间协商通讯Node Manager
通讯,检测任务挂起和从新调度YARN
分配container
两台服务器A、B:每一个服务器有一个Node Manager
在运行
两个任务一、2:每一个任务有一个Application Master
全局有一个Resource Manager
在运行
cdn
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