【资源调度总纲】Yarn源码剖析(零) --- spark任务提交到yarn的流程

前言

本系列的目的在于试图剖析spark任务提交至hadoop yarn上的整个过程,从yarn的启动,以及spark-submit提交任务到yarn上,和在yarn中启动任务包括yarn组件之间的通信,用以提升自身知识储备,记录学习的过程为目的,由于个人能力有限文章中或许有理解不到位的地方,敬请谅解。本系列侧重的部分是yarn相关的部分,所以在spark-submit代码剖析阶段会缺少与spark相关的部分。分析的源码基于spark_2.11版本以及Hadoop-2.7.4版本。

 

流程图

为了更好的理解yarn的资源调度,本篇文章将介绍spark任务提交到yarn上直至启动的流程分析,在本系列的后面几篇文章都会围绕以下这个流程图来做分析
 

【资源调度总纲】Yarn源码剖析(零) --- spark任务提交到yarn的流程

1. spark-submit提交任务时在spark端就会封装好资源请求,以及AM启动的上下文,spark任务的AM是spark自己封装的AM,其实各个计算引擎如果要在Yarn上提交任务,都会选择在自己封装一个新的AM来进行管理应用程序。


2. 将任务提交到RM上,RM就收请求任务的请求就会准备启动AM


3. 启动AM,启动AM的过程非常的复杂,本系列文章为专门拿一章出来专门讲解。

 

4. AM向RM注册自己。

 

5. AM成功注册到RM上后,就会发送资源请求给ApplicationMasterService(RM的子服务,之前也说过RM是由众多子服务租车的一个服务,所以这里其实就是发给RM)

 

6. RM接受到请求后就去各个NM上请求Container


7. NM检查自身节点后就会生成合适的Container返回给RM


8. AM会拿到NM返回给RM的Container,拿到之后会告知RM我要启动这些Container


9. RM发送请求给NM去启动Container


10. 最终启动在匹配的节点启动Container

 

系列阅读指导

在后面的博文中,蛋挞将陆续分析以下几个模块:

1. 有兴趣了解Yarn基础方面的可以阅读Yarn组件介绍

 

2. 在我们提交任务之前,有兴趣了解Yarn启动、以及RM,NM的心跳通信可以阅读Yarn源码剖析(一) --- RM与NM服务启动以及心跳通信

 

3. 关于spark-submit端代码的解析可以阅读Yarn源码剖析(二) --- spark-submit


4. 关于ApplicationMaster的启动请可以阅读Yarn源码剖析(三)-- ApplicationMaster的启动


5. 关于ApplicationMaster注册到RM,以及AM申请Container和Container的启动,可以阅读Yarn源码剖析(四)-- AM的注册与资源调度申请Container及启动


6. 在蛋挞不断学习过程中也会不断更新完善文章,以求输出高质量的文章。

 

小结:

本文主要是针对后面对Yarn的研究做一个方向上的敲定,粗浅的介绍了spark任务是经过了怎么样的调度最终在Yarn上启动的。

最后感谢在阅读Yarn源码中网上许多博客大牛给予的文章指导,在后文的分析中难免会借鉴到各位博主的一些想法和观念,若有冒犯,请告知我删除相关的内容。


作者:蛋挞

日期:2018.07.31