当前位置: 首页 > news >正文

自画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

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

源码流程图

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

相关文章:

  • 【商城实战(36)】UniApp性能飞升秘籍:从渲染到编译的深度优化
  • 【JavaEE】IOC和DI
  • 一周热点:Compact Reasoning 精简推理
  • 实体多ID关联分页查询实例
  • Compose笔记(十一)--DataStore(二)
  • Day09 -实例:拿到加密密文进行解密
  • 【拒绝算法PUA】LeetCode 2270. 分割数组的方案数
  • Dijkstra解决单源最短路径
  • 2.1 transformer模型原理及代码(python)
  • 深度学习常用操作笔记
  • 多重背包讲解
  • 使用TensorFlow时需掌握的Pandas核心知识点
  • JDK15开始偏向锁不再默认开启
  • Qt开发——问界M9空调
  • 强化学习的一些概念
  • 运维面试题(三)
  • Java虚拟机面试题:内存管理(中)
  • 【java】集合练习2
  • Chapter 4-11. Troubleshooting Congestion in Fibre Channel Fabrics
  • Nest系列:在 NestJS 中使用 Joi 进行环境变量验证与配置管理-03
  • 智利观众也喜欢上海的《好东西》
  • 19个剧团15台演出,上海民营院团尝试文旅融合新探索
  • 【社论】职业上新,勇于“尝新”
  • 深圳两家会所涉卖淫嫖娼各被罚7万元逾期未缴,警方发催告书
  • 毕赣新作《狂野时代》入围戛纳主竞赛单元,易烊千玺舒淇主演
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神