MR的提交流程
(1)作业提交
1.Client调用job.waitForCompletion方法,向整个集群提交 MapReduce 作业。
2.Client 向 RM 申请一个作业 id。
3.RM 给 Client 返回该 job 资源的提交路径和作业 id。
4.Client 提交 jar 包、切片信息和配置文件到指定的资源提交路径。
5.Client 提交完资源后,向 RM 申请运行 MrAppMaster。
(2)作业初始化
6.当 RM 收到 Client 的请求后,将该 job 添加到容量调度器中。
7.某一个空闲的 NM 领取到该 Job。
8.该 NM 创建 Container,并产生 MRAppmaster。
9.下载 Client 提交的资源到本地。
(3)任务分配
10.MRAppMaster向RM申请运行MapTask 任务资源。(这里举例两个)
11.RM 将运行 MapTask 任务分配给另外两个 NodeManager,另两个 NodeManager分别领取任务并创建容器。
(4)任务运行
12.MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个NodeManager 分别启动 MapTask,MapTask 对数据分区排序。
13.MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
14.ReduceTask 向 MapTask 获取相应分区的数据。
15.程序运行完毕后,MR 会向 RM 申请注销自己。
spark yarn cluster的提交流程
1.执行脚本提交任务,实际启动一个SparkSubmit的JVM进程;
2.SparkSubmit类中main方法反射调用YarnClusterApplication的main方法;
3.YarnClusterApplication创建yarn客户端,然后向Yarn服务器发送执行指令:bin/java ApplicationMaster;
4.Yarn 框架收到指令后会在指定的 NM 中启动 ApplicationMaster;
5.ApplicationMaster启动Driver线程,执行用户的作业
6.AM向RM注册,申请资源
7.获取资源后AM向NM发送指令:bin/java YarnCoarseGrainedExecutorBackend;
8.CoarseGrainedExecutorBackend 进程会接收消息,跟 Driver 通信,注册已经启动的Executor;然后启动计算对象 Executor 等待接收任务
9.Driver 线程继续执行完成作业的调度和任务的执行。
10.Driver 分配任务并监控任务的执行。
spark yarn client
1.执行脚本提交任务,实际是启动一个 SparkSubmit 的 JVM 进程;
2.SparkSubmit 类中的 main 方法反射调用用户代码的 main 方法;
3.启动 Driver 线程,执行用户的作业,并创建 ScheduleBackend;
4.YarnClientSchedulerBackend 向 RM 发送指令:bin/java ExecutorLauncher;
5.Yarn 框架收到指令后会在指定的 NM 中启动 ExecutorLauncher(实际上还是调用ApplicationMaster 的 main 方法);
6.AM 向 RM 注册,申请资源;
7.获取资源后 AM 向 NM 发送指令:bin/java CoarseGrainedExecutorBackend;
8.CoarseGrainedExecutorBackend 进程会接收消息,跟 Driver 通信,注册已经启动的Executor;然后启动计算对象 Executor 等待接收任务
9.Driver 分配任务并监控任务的执行。