作业的提交
创建内部的jobsubmiter实例来提交作业,具体步骤
1.向资源管理器 resource manager请求应用ID作为作业ID
2.检查作业的输出说明,如指定输出目录等
3.计算作业的输入分片,对文件的分片
4.将运行作业所需要的资源,如文件分片,jar文件等,复制到一个以作业ID为目录下的共享文件系统中,调用submitapplication()提交作业,调用资源管理器
作业初始化
1.资源管理器收到submitapplycation()调用后,将请求传给yarn调度器
2.调度器分配容器container,然后资源管理器在container中执行application mater进程,接收来自任务的进度和报告。
3.application master 接受来自共享文件系统的文件分片,来确定对每个分片创建一个map任务以及reduce任务,分配任务ID
4.在运行任务之前,调用setupjob()设置作业最终输出目录及任务最终输出目录
任务分配
1.为所有map和reduce任务想资源管理器申请container,优先请求map任务容器,
2.确定cpu和内存需求,设计参数 mapreduce.map.memory.mb mapreduce.reduce.memory.mb内存 mapreduce.map.cpu.vcores mapreduce.reduce.cpu.vcoresp.memory.mb CPU
任务的执行
1.为任务分配完container,application mater与节点管理器通信来启动container
2.任务所需资源本地化,然后运行map或者reduce任务。
任务进度和状态更新
任务在运行时,需要对进度保持跟踪。对于map任务而言,任务进度是已处理输入的所占百分比,reduce而言是系统计算的已处理输入所占百分比。
计数器:负责对任务进行过程中各个时间的计数,如输入行数等,通过每秒轮询application mater获取。
作业完成
1.application master收到最后一个任务完成通知后,将作业状态置为成功,将信息输出到控制台
2.application master和container 清理工作状态,将中间输出删除,作业日志被记录被存档以便日后查询
网友评论