Flink源码解析(一)——运行时架构全景概览

一、Hadooop Yarn框架简述

本小节参考董西成老师书籍《Hadoop技术内幕深入解析YARN框架设计与实现原理》p35、p36页内容,相关Yarn框架细节可阅读该书籍。

1、用户向Yarn中提交MapReduce、Spark、Flink等分布式计算应用程序,其中包含ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

2、ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3、ApplicationMaster首先向ResourceManager注册自己,这样用户可以通过ResourceManager查看应用程序的运行状态。然后ApplicationMaster将为各个任务申请资源,并监控任务的运行状态,直到运行结束。即重复步骤4~7。

4、 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5、ApplicationMaster领取到资源后便于对应的NodeManager通信,要求它启动任务。

6、NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务运行命令写到一个脚本中,并通过运行该脚本启动任务。

7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

8、应用程序运行完成后ApplicationMaster向ResourceManager注销并关闭自己。

二、Flink On Yarn Application模式作业提交运行过程顺序说明

 

 

1、Flink Client端通过flink命令行向Yarn集群提交Flink作业,在Flink Client进程中生成YarnClient信息并和Yarn:ResourceManager、Yarn:NodeManager等Yarn集群组件通信,在Yarn:NodeManager分配container容器启动ApplicationMaster:YarnApplicationClusterEntryPoint服务,该服务可以简单理解成Flink JobManager服务。YarnApplicationClusterEntryPoint负责以反射的形式触发Flink作业的main(...)方法执行。上图红色连线代表Flink Client端在Application模式下提交Flink作业的交互过程。具体过程参考《Flink源码解析(十)——Flink On Yarn客户端提交过程解析

2、Flink作业启动后StreamExecutionEnvironment、DataStream、Transformation、AbstractStreamOperator、UDF Function、StreamGraph、JobGraph、ExecutionGraph等转化提交过程,参考随笔二~随笔十五。

 

3、Flink作业启动及Task之间数据交互过程,参考随笔十六~随笔十九。

三、Flink Checkpoint过程解析

 

1、JobMaster触发Checkpoint

JobMaster开始调度作业时会为作业提供一个CheckpointCoordinator组件,该组件周期性通知Source Task产生CheckpointBarrier事件,注入数据流中。混合着数据事件被下游算子截获并触发Checkpoint行为。

2、TaskExecutor执行Checkpoint

JobMaster通过TaskManagerGateway触发TaskManager的检查点行为,TaskManager则转交给Task执行。

3、Task上报Checkpoint完成

当一个算子完成状态持久化后会向JobMaster发送Checkpoint完成消息。

4、JobMaster确认Checkpoint

JobMaster通过调度器ScheduerNG组件通知算子Checkpoint完成事件后的commit动作。

参考随笔二十~随笔二十一。

posted @ 2023-08-08 23:50  有一个娃  阅读(279)  评论(0编辑  收藏  举报