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

源码流程图

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

相关推荐
2501_9414037618 小时前
Python高性能图像识别与TensorFlow实战分享:深度学习模型优化与批量推理经验
flink
Bug快跑-12 天前
面向高并发场景的多语言异构系统架构演进与性能优化策略深度解析实践分享全过程方法论探索
flink
青云交2 天前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
Hello.Reader2 天前
在 Flink Standalone 集群上运行 Flink CDC从下载到跑起一个 MySQL→Doris 同步任务
大数据·mysql·flink
A尘埃3 天前
Flink实时数据处理
大数据·flink·实时数据处理
expect7g3 天前
Paimon源码解读 -- PartialUpdateMerge
大数据·后端·flink
yumgpkpm3 天前
腾讯云TBDS与CDH迁移常见问题有哪些?建议由CDH迁移到CMP 7.13 平台(类Cloudera CDP,如华为鲲鹏 ARM 版)
hive·hadoop·zookeeper·flink·spark·kafka·hbase
Hello.Reader3 天前
使用 Flink CDC 搭建跨库 Streaming ETLMySQL + Postgres → Elasticsearch 实战
大数据·elasticsearch·flink
❀͜͡傀儡师4 天前
docker 部署Flink和传统部署
docker·容器·flink
bigdata-rookie4 天前
Spark 部署模式
大数据·分布式·spark