自画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上执行。

源码流程图

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

相关推荐
头茬韭菜1 小时前
图解 Fluss(五):Flink 接入与数据生命周期 —— Connector、表生命周期与冷热分层
大数据·flink·fluss
StarRocks_labs2 小时前
StarRocks × Fluss × Paimon:流湖仓分析与 ETL 闭环
starrocks·flink·jni·native·paimon·湖仓·fluss
数智启示录2 小时前
Doris精讲篇(六) 从第一批小文件到 -235:Doris 是怎样被正常写入拖死的
大数据·数据库·经验分享·面试·flink
StarRocks_labs3 小时前
StarRocks 存算分离架构下的大规模实时导入优化实践
starrocks·flink·sstable·compaction·tablet·主键索引·存算分离架构
starzy199017 小时前
SparkStreaming 之 Direct 模式深度剖析
大数据·spark
JLWcai2025100921 小时前
树脂砂轮质保与科学存放
mongodb·zookeeper·spark·memcached·storm
用户3610588626121 天前
SparkStreaming 之 DStream 底层结构剖析
大数据·spark
ZCBUS实时计算2 天前
信创混合存储架构落地实战|基于 ZCBUS 实时计算构建证券高可用实时风控数仓
大数据·架构·flink·kafka·dba
Code知行合壹2 天前
数据中台设计
大数据·分布式·spark