千锋教育大数据Hadoop全新升级版入门教程,零基础从安装搭建到集群调优
2023-07-20 22:55 作者:bili_76673074185 | 我要投稿

- 用户调用
waitForCompletion
方法来提交作业,并且每秒轮询作业的进度。内部封装了submit()
方法,用于创建JobCommiter
实例,并调用其submitJobInternal
方法。 JobCommiter
实例向ResourceManager
申请一个新的应用ID,用于标识MapReduce作业。同时,它会检查输出路径的情况,并计算输入数据的分片。- 如果成功获取到ID,
JobCommiter
会将作业所需的资源(包括作业的JAR文件、配置文件和计算得到的输入数据分片元数据文件)上传到以ID命名的目录下的HDFS上。默认情况下,副本个数是10。 - 准备工作完成后,
JobCommiter
会通知ResourceManager
调用submitApplication
方法来提交作业。 ResourceManager
收到submitApplication
方法的调用后,会通知Yarn调度器(Scheduler),调度器会分配一个容器,在节点管理器的管理下启动应用程序主进程(Application Master)。- 应用程序主进程(Application Master)的主类是
MRAppMaster
,它的主要作用是初始化任务,并接收任务的进度和完成报告。 - 应用程序主进程从HDFS上获取资源,主要是数据分片(split)。然后,为每个数据分片创建Map任务和指定数量的Reduce任务,同时为任务分配唯一的任务ID。
- 应用程序主进程会向资源管理器请求容器,首先为Map任务申请容器,然后为Reduce任务申请容器。这个过程大约占整个作业运行时间的5%。
- 一旦资源管理器的调度器为任务分配了特定节点上的容器,应用程序主进程会与相应的节点管理器进行通信,以启动容器。
- 任务的运行是由YarnChild进程来执行的。在运行任务之前,需要将相关的资源进行本地化,包括JAR文件、配置文件和缓存文件。
- 然后,开始运行Map任务或Reduce任务。
- 当应用程序主进程收到最后一个任务已完成的通知后,会将作业状态设置为成功(success)。然后,作业会继续轮询,直到成功完成,然后通知客户端,并将统计信息输出到控制台。
这样,作业的提交过程就完成了。整个过程涉及到资源的申请、上传、分配和执行任务的过程,最终输出作业的结果和统计信息。