job提交作业流程
- 调用waitForCompletion每秒轮询作业进度,内部封装了submit()方法用于创建jobCommit的实例,jobCommit的实例实例会调用自己的submitJobInternal提交作业,如果状态有变化就将作业进度输出在控制台,如果失败也会将错误输出
- jobCommit会向ResourceManager申请一个id号用于MapReduce作业,同时检查输出路径,并且计算输入分片
- 如果id号申请成功,会将作业所需的资源包括(jar包,分片的元数据,配置文件)放到一个用id命名的目录下的HDFS文件,此时默认副本是10个
- 准备工作完成,通知ResourceManager调用submitAppcation提交作业
- ResourceManager调用submitAppcation后,会通知yarn调度器,调度器分配一个容器,在节点管理器的监视下启动,application master进程
- application master进程的主类是MRAppMaster它的主要作用是初始化任务,并且接收来自任务的进度报告
- 然后从HDFS上下载资源主要是split分片,为每个分片创建一个map任务,以及指定参数的reduce任务,任务id此时确定
- 然后Application Master会为每一个maptask,和reducetask申请资源首先为maptask申请容器,reducetask在map申请5%的时候开始申请
- 运行任务是由YarnChild来执行的,运行任务前,先将资源本地化(jar文件,配置文件,缓存文件)
- 运行maptask,和reducetask
- 当每个任务都运行完成后Application Master会将任务状态改为success状态,当客户端轮询的时候就会将任务完成信息打印到控制台