- 提交Job:客户端里有map jar xml等任务等待提交-->提交job 到resmanager有一个程序appsmaster,
- jobID和临时目录:紧接着生成一个jobID和一个初始化目录(临时工作目录)返回客户端 根据提交的程序类型(flink,spark..)生成对应的程序类型,创建内容MRappMaster
- 初始化job:客户端生成一个初始化来初始化job 到刚才返回的目录,可以创建临时目录/xxx.conf/默认参数mr-job-conf-xml/上传wc.jar包/输入路径/计算任务切片.split[]
- Job(run):客户端申请开始运行job,在resmanager 生成一个任务,去找存在调度器.生成一个任务队列去分配资源默认1.5G 1C,所以去找了一个2G内存.
- Nodemanager 去领取任务:->创建默认容器的任务(2G 1C) 在容器里创建MRAppMaster
- 获取程序必须项: MRAppMaster à从初始化目录里把jar包/split[]拿过来,就知道有几个maptask和reduce的个数à开始计算需要几个任务eg3个mapotask 2个reducetask
- 申请资源:MRAppMaster向ResourceMasnager申请资源,(5个容器)最好一个task一个容器,紧接着ResourceMasnager去找调度器,调度器检查资源是否有位置去使用à紧接着生成任务放在调度器里(5个),à去找nodeManager合理分配任务
- NodeManager领取任务创建容器:各个从节点领取任务并且创建容器
- 容器向主节点注册:容器(container)向MRAppMaster注册,从而拿到jar包等,à
- 创建Task:容器里面创建一个对象YarnChild去拿到jar包,à就能创建MapTask了,其他nodeManager也都有这个容器里的对象,
- MrAppmaster统一执行:此时MRAppMaster发布一键启动指令给各个容器里的YarnChild里的MapTaskà运行时MapTask三个任务都会向MRAPPMaster进行任务进度的汇报(何时成功)才能进行ReduceTask任务,à也会向ResourManager进行汇报
- 领取ReduceTask创建容器: 各个nodeManager领取ReducerTask任务创建容器à在容器里面创建YarnChildà创建ReduceTask ,紧接着MRAPPMaster CMD统一执行任务Task, YarnChild里的ReduceTask同样向MRAPPMaster进行汇报
输出结果: 执行完两个Reduce输出结果,同时释放对象,MapTask和ReduceTask进行对象回收,然后YarnChild回收,紧接着回收容器,最后MRAppMaster进行回收