自画flink、spark源码学习流程大图分享

以前写过flink专栏,分了好几篇,且源码流程图也被拆分了。这次直接分享spark和flink从提交命令行到完整走完案例的源码流程图。

spark

spark执行流程简述如下:

(1)用户输入运行任务的命令行;

(2)执行SparkSubmit中的main,解析用户输入命令行参数;

(3)准备提交环境,创建YarnClusterApplication并启动;

(4)创建Yarn的客户端Client与YarnCluster通信;

(5)通过YarnClinet向YarnCluster中的ResourceManager提交应用程序;

(6)ResourceManager让某个NodeManager启动ApplicationMaster;

(7)ApplicationMaster创建一个YarnRMClient用于与ResourceManager通信;

(8)在ApplicationMaster中Driver线程;

(9)Driver线程执行用户编写程序,此时其他申请资源等操作被阻塞;

(10)直到执行用户编写程序初始化完SparkContext,这时候Driver线程也陷入阻塞,申请资源等操作解除阻塞继续运行;

(11)ApplicationMaster向ResourceManager注册自己并申请资源,ResourceManager返回其资源可用列表;

(12)创建nmClient用于与其他NodeManager通信;

(13)让其他NodeManager启动YarnCoarseGrainedExecutorBackend,即用于通信的Executor进程;

(14)与Driver通信,请求注册Executor;

(15)Driver使用SparkContext中的CoarseGrainedSchedulerBackend接收注册消息,进行一些设置后返回注册成功响应;

(16)收到注册成功响应后创建Executor计算对象并发送已启动的消息给Driver;

(17)经过一系列操作后,即申请资源完毕,executor创建准备好了,Driver线程恢复运行继续执行业务逻辑代码;

(18)首先建立各RDD之间的依赖,父RDD的分区最多被子RDD的一个分区使用则为NarrowDependency;

(19)同一个父RDD的分区被多个子RDD的分区依赖,则为ShuffleDependency;

(20)从后往前,碰到ShuffleDependency就划分创建阶段;

(21)以每个阶段的最后一个RDD的分区数量来切分任务数量;

(22)调度算法分为FIFO和FAIR,选择一种调度算法对切分得到的任务进行排序按照本地级别高低提供给各个节点的executor执行。

flink执行流程简述如下:

1.输入运行任务脚本

2.解析参数CliFrontendParser

3.选择Cli,例如FlinkYarnSessionCli

4.执行用户代码execute

5.生成streamGraph

6.生成JobGraph

7.上传jar包和配置

8.封装提交参数和启动AM的命令

9.任务提交给集群submitApplication

10.启动ApplicationMaster

11.AM创建并启动Dispatcher

12.Dispatcher启动JobMaster

13.AM启动ResourceManager,其中包含SlotManager

14.SlotManager实时检查所需slot是否足够

15.JobMaster生成ExecutionGraph

16.JobMaster中的SlotPool像SlotManager注册、请求slot

17.flink内部rm向yarn的rm申请资源

18.yarn的rm在某个nm上启动TaskManager

19.runTaskManager启动TaskExecutor

20.TaskExecutor向slotManager注册slot,slotManager分配好slot返回通知。

20.TaskExecutor提供slot给slotPool

21.JobMaster最后submitTask提交任务在slot上执行。

源码流程图

文件较大,以资源形式分享

相关推荐
北漂老男孩2 天前
Flink SQL 编程详解:从入门到实战难题与解决方案
大数据·sql·flink
MyikJ2 天前
Java互联网大厂面试:从Spring Boot到Kafka的技术深度探索
java·spring boot·微服务·面试·spark·kafka·spring security
向哆哆2 天前
Java 大数据处理:使用 Hadoop 和 Spark 进行大规模数据处理
java·hadoop·spark
阿里云大数据AI技术3 天前
Fusion引擎赋能:流利说如何用阿里云Serverless Spark实现数仓计算加速
大数据·人工智能·阿里云·spark·serverless·云计算
动力暖暖3 天前
Flink2.0及Flink-operater在K8S上部署
大数据·flink·kubernetes
北漂老男孩3 天前
Flink Table API 编程入门实践
大数据·flink·学习方法
Matrix703 天前
大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱
大数据·hive·spark
weixin_307779133 天前
Apache SeaTunnel 引擎深度解析:原理、技术与高效实践
大数据·flink·spark·数据库开发·etl
Microsoft Word3 天前
Flink
大数据·flink
wuli玉shell4 天前
spark shuffle的分区支持动态调整,而hive不支持
大数据·hive·spark