mr中shuff过程分析
一、job提交过程
申请提交job的前期准备工作:
1)客户端向resourcemanager提交job请求
2)rm 向客户端返回一个 job_id 以及 共享资源路径(在hdfs下的 tmp)
3)客户端将共享数据 放在 共享资源路径下(job.jar,job.spplit、job.xml))
4) 客户端向rm返回资源放置成功的响应, 真正的提交应用程序
mrappmaster的开启以及准备阶段:
5)rm向客户端返回一个节点 运行mrappmaster(便于客户端检测任务的进程)
6)rm到对应的节点启动mrappmaster(先启动container(scheduler)在启动mrappmaster)
7)mrappmaster 将job初始化(生成application_id) 并且生成一个当前的job工作簿 记录maptask|reducsk的进程和状态
8)mrappmaster到共享资源下 下载共享资源到本地
9)mrappmaster向rm申请maptask 和 reducetask运行资源, 优先maptask
10)rm向mrappmaster返回对应的资源节点 如:maptask,数据本地化 01 、rducetask 随机 03
mrappmaster开始启动 maptsk(优先) 和 reducetask
maptask:
11)mrappmaster到对应的节点出启动maptask,前提是scheduler以及分配了container
12)mrappmaster到共享资源下,下载共享资源到本地
13)开始运行maptask
14)maptask在运行期间,向mrappmaster汇报自己的进度和状态
15) 当mrappmaster获取到了“一个节点”上的所有的maptask任务执行完成, 启动reducetask
reducetask:
16)mrappmaster到对应的节点启动reducetask,先由scheduler分配container
17)reducetask到共享资源路径下,下载共享资源到本地
18)所有的maptask完成, 且 fetch 也完成, 开始真正执行reducetask中的reduce方法
19)reducetask在执行期间向mrappmaster汇报自己的进度和状态
资源的释放:
20)当maptask | reducetask运行完成, mrappmaster到对相应的节点进行资源回收
21)所有的maptask 和 reducetask 运行结束 , mrappmaster向rm注销自己, 并释放资源
二、各个角色的作用:
resourcemanager:
1)接受客户端的请求
2)为job进行资源分配
3)启动mrappmaster
4)监控mrappmaster的运行进度和状态
5)接受nodemanager的心跳报告
nodemager 向 resourcemanager 发送心跳 资源状况
6)监控每一个nodemanager上的资源状况
nodemanager:
1)接受rm的命令
2)接受mrappmaster的命令
3)真正的提供资源
4)向rm发送心跳报告 自己的资源状况
mrappmaster:
1)帮助maptask|reducetask 申请运行的资源
2)启动 maptask|reducetask
3)监控 或 跟踪 maptask|reducetask的运行进度和状态 失败重启
4)销毁maptask reducetask的资源----:| -------------:|:-------------|