有关网站建设的合同,微信公众号怎么开店流程,wordpress5.0后台慢,网站描述是什么Flink 详解#xff08;六#xff09;#xff1a;源码篇 Ⅰ 55、Flink 作业的提交流程#xff1f;56、Flink 作业提交分为几种方式#xff1f;57、Flink JobGraph 是在什么时候生成的#xff1f;58、那在 JobGraph 提交集群之前都经历哪些过程#xff1f;59、看你提到 Pi… Flink 详解六源码篇 Ⅰ 55、Flink 作业的提交流程56、Flink 作业提交分为几种方式57、Flink JobGraph 是在什么时候生成的58、那在 JobGraph 提交集群之前都经历哪些过程59、看你提到 PipeExecutor它有哪些实现类60、Local 提交模式有啥特点怎么实现的61、远程提交模式都有哪些62、Standalone 模式简单介绍一下63、yarn 集群提交方式介绍一下64、yarn - session 模式特点65、yarn - per - job 模式特点66、yarn - application 模式特点67、yarn - session 提交流程详细介绍一下68、yarn - per - job 提交流程详细介绍一下 55、Flink 作业的提交流程
Flink 的提交流程
在 Flink Client 中通过反射启动 jar 中的 main 函数生成 Flink StreamGraph 和 JobGraph将 JobGraph 提交给 Flink 集群。Flink 集群收到 JobGraphJobManager 收到后将 JobGraph 翻译成 ExecutionGraph然后开始调度启动成功之后开始消费数据。
总结来说Flink 核心执行流程对用户 API 的调用可以转为 StreamGraph → JobGraph → ExecutionGraph。
56、Flink 作业提交分为几种方式
Flink 的作业提交分为两种方式
Local 方式即本地提交模式直接在 IDEA 运行代码。远程提交方式分为 standalone 方式、yarn 方式、K8s 方式。其中yarn 方式又分为三种提交模式yarn-per-job 模式、yarn-session 模式、yarn-application 模式。
57、Flink JobGraph 是在什么时候生成的
StreamGraph、JobGraph 全部是在 Flink Client 客户端生成的即提交集群之前生成原理图如下 58、那在 JobGraph 提交集群之前都经历哪些过程
用户通过启动 Flink 集群使用命令行提交作业运行 flink run -c WordCount xxx.jar。运行命令行后会通过 run 脚本调用 CliFrontend 入口CliFrontend 会触发用户提交的 jar 文件中的 main 方法然后交给 PipelineExecuteor 的 execute 方法最终根据提交的模式选择触发一个具体的 PipelineExecutor 执行。根据具体的 PipelineExecutor 执行将对用户的代码进行编译生成 StreamGraph经过优化后生成 Jobgraph。
具体流程图如下 59、看你提到 PipeExecutor它有哪些实现类
PipeExecutor 在 Flink 中被叫做 流水线执行器它是一个接口是 Flink Client 生成 JobGraph 之后将作业提交给集群的重要环节。前面说过作业提交到集群有好几种方式最常用的是 yarn 方式yarn 方式包含 3 3 3 种提交模式主要使用 session 模式per-job 模式。application 模式中 JobGraph 是在集群中生成。
所以 PipeExecutor 的实现类如下图所示在代码中按 CTRLH 就会出来 除了上述红框的两种模式外在 IDEA 环境中运行 Flink MiniCluster 进行调试时使用 LocalExecutor。
60、Local 提交模式有啥特点怎么实现的
Local 是在本地 IDEA 环境中运行的提交方式。不上集群。主要用于调试原理图如下 Flink 程序由 JobClient 进行提交。 JobClient 将作业提交给 JobManager。 JobManager 负责协调资源分配和作业执行。资源分配完成后任务将提交给相应的 TaskManager。 TaskManager 启动一个线程开始执行TaskManager 会向 JobManager 报告状态更改如开始执 行正在进行或者已完成。 作业执行完成后结果将发送回客户端。
源码分析通过 Flink 1.12.2 1.12.2 1.12.2 源码进行分析的。
1创建获取对应的 StreamExecutionEnvironment 对象LocalStreamEnvironment。
调用 StreamExecutionEnvironment 对象的 execute 方法。 2获取 StreamGraph。 3执行具体的 PipeLineExecutor 得到 localExecutorFactory。 (4) 获取 JobGraph。
根据 localExecutorFactory 的实现类 LocalExecutor 生成 JobGraph。 上面这部分全部是在 Flink Client 生成的。由于是使用 Local 模式提交所以接下来将创建 MiniCluster 集群由 miniCluster.submitJob 指定要提交的 jobGraph。
5实例化 MiniCluster 集群。 6返回 JobClient 客户端。
在上面执行 miniCluster.submitJob 将 JobGraph 提交到本地集群后会返回一个 JobClient 客户端该 JobClient 包含了应用的一些详细信息包括 JobID、应用的状态等等。最后返回到代码执行的上一层对应类为 StreamExecutionEnvironment。 以上就是 Local 模式的源码执行过程。
61、远程提交模式都有哪些
远程提交方式分为 Standalone 方式、Yarn 方式、K8s 方式。
Standalone包含 session 模式。Yarn 方式 分为三种提交模式yarn-per-job 模式、yarn-Session 模式、yarn-application 模式。K8s 方式包含 session 模式。
62、Standalone 模式简单介绍一下
Standalone 模式为 Flink 集群的 单机版提交方式只使用一个节点进行提交常用 Session 模式。 提交命令如下
bin/flink run org.apache.flink.WordCount xxx.jarClient 客户端提交任务给 JobManager。JobManager 负责申请任务运行所需要的资源并管理任务和资源。JobManager 分发任务给 TaskManager 执行。TaskManager 定期向 JobManager 汇报状态。
63、yarn 集群提交方式介绍一下
通过 yarn 集群提交分为 3 3 3 种提交方式
session 模式per-job 模式application 模式
64、yarn - session 模式特点
提交命令如下
./bin/flink run -t yarn-session \
-Dyarn.application.idapplication_XXXX_YY xxx.jaryarn-session 模式所有作业共享集群资源隔离性差JM 负载瓶颈main 方法在客户端执行。适合执行时间短频繁执行的短任务集群中的所有作业只有一个 JobManager另外Job 被随机分配给 TaskManager。
特点session-cluster 模式需要先启动集群然后再提交作业接着会向 Yarn 申请一块空间后资源永远保持不变。如果资源满了下一个作业就无法提交只能等到 Yarn 中的其中一个作业执行完成后释放了资源下个作业才会正常提交。所有作业共享 Dispatcher 和 ResourceManager共享资源适合规模小执行时间短的作业。 65、yarn - per - job 模式特点
提交命令
./bin/flink run -t yarn-per-job --detached xxx.jaryarn-per-job 模式每个作业单独启动集群隔离性好JM 负载均衡main 方法在客户端执行。在 per-job 模式下每个 Job 都有一个 JobManager每个 TaskManager 只有单个 Job。
特点一个任务会对应一个 Job每提交一个作业会根据自身的情况都会单独向 Yarn 申请资源直到作业执行完成一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享 Dispatcher 和 ResourceManager按需接受资源申请。适合规模大长时间运行的作业。 66、yarn - application 模式特点
提交命令如下
./bin/flink run-application -t yarn-application xxx.jaryarn-application 模式每个作业单独启动集群隔离性好JM 负载均衡main 方法在 JobManager 上执行。
在 yarn-per-job 和 yarn-session 模式下客户端都需要执行以下三步即
获取作业所需的依赖项通过执行环境分析并取得逻辑计划即 StreamGraph → JobGraph将依赖项和 JobGraph 上传到集群中。 只有在这些都完成之后才会通过 env.execute() 方法触发 Flink 运行时真正地开始执行作业。如果所有用户都在同一个客户端上提交作业较大的依赖会消耗更多的带宽而较复杂的作业逻辑翻译成 JobGraph 也需要吃掉更多的 CPU 和内存客户端的资源反而会成为瓶颈。
为了解决它社区在传统部署模式的基础上实现了 Application 模式。原本需要客户端做的三件事被转移到了 JobManager 里也就是说 main() 方法在集群中执行入口点位于 ApplicationClusterEntryPoint客户端只需要负责发起部署请求了。 综上所述Flink 社区比较推荐使用 yarn-per-job 或者 yarn-application 模式进行提交应用。
67、yarn - session 提交流程详细介绍一下
提交流程图如下 1、启动集群
Flink Client 向 Yarn ResourceManager 提交任务信息。 Flink Client 将应用配置Flink-conf.yaml、logback.xml、log4j.properties和相关文件Flink Jar、配置类文件、用户 Jar 文件、JobGraph 对象等上传至分布式存储 HDFS 中。Flink Client 向 Yarn ResourceManager 提交任务信息。 Yarn 启动 Flink 集群做 2 2 2 步操作 通过 Yarn Client 向 Yarn ResourceManager 提交 Flink 创建集群的申请Yarn ResourceManager 分配 Container 资源并通知对应的 NodeManager 上启动一个 ApplicationMaster每提交一个 Flink Job 就会启动一个 ApplicationMasterApplicationMaster 会包含当前要启动的 JobManager 和 Flink 自己内部要使用的 ResourceManager。在 JobManager 进程中运行 YarnSessionClusterEntryPoint 作为集群启动的入口。初始化 DispatcherFlink 自己内部要使用的 ResourceManager启动相关 RPC 服务等待 Flink Client 通过 Rest 接口提交 JobGraph。
2、作业提交 Flink Client 通过 Rest 向 Dispatcher 提交编译好的 JobGraph。Dispatcher 是 Rest 接口不负责实际的调度、指定工作。 Dispatcher 收到 JobGraph 后为作业创建一个 JobMaster将工作交给 JobMasterJobMaster 负责作业调度管理作业和 Task 的生命周期构建 ExecutionGraphJobGraph 的并行化版本调度层最核心的数据结构。
以上两步执行完后作业进入调度执行阶段。
3、作业调度执行 JobMaster 向 ResourceManager 申请资源开始调度 ExecutionGraph。 ResourceManager 将资源请求加入等待队列通过心跳向 YarnResourceManager 申请新的 Container 来启动 TaskManager 进程。 YarnResourceManager 启动然后从 HDFS 加载 Jar 文件等所需相关资源在容器中启动 TaskManagerTaskManager 启动 TaskExecutor。 TaskManager 启动后向 ResourceManager 注册并把自己的 Slot 资源情况汇报给 ResourceManager。 ResourceManager 从等待队列取出 Slot 请求向 TaskManager 确认资源可用情况并告知 TaskManager 将 Slot 分配给哪个 JobMaster。 TaskManager 向 JobMaster 回复自己的一个 Slot 属于你这个任务JobMaser 会将 Slot 缓存到 SlotPool。 JobMaster 调度 Task 到 TaskMnager 的 Slot 上执行。
68、yarn - per - job 提交流程详细介绍一下
提交命令如下
./bin/flink run -t yarn-per-job --detached xxx.jar提交流程图如下所示 1、启动集群
Flink Client 向 Yarn ResourceManager 提交任务信息。 Flink Client 将应用配置Flink-conf.yaml、logback.xml、log4j.properties和相关文件Flink Jar、配置类文件、用户 Jar 文件、JobGraph 对象等上传至分布式存储 HDFS 中。Flink Client 向 Yarn ResourceManager 提交任务信息。 Yarn 启动 Flink 集群做 2 2 2 步操作。 通过 Yarn Client 向 Yarn ResourceManager 提交 Flink 创建集群的申请Yarn ResourceManager 分配 Container 资源并通知对应的 NodeManager 上启动一个 ApplicationMaster每提交一个 Flink Job 就会启动一个 ApplicationMasterApplicationMaster 会包含当前要启动的 JobManager 和 Flink 自己内部要使用的 ResourceManager。在 JobManager 进程中运行 YarnJobClusterEntryPoint 作为集群启动的入口。初始化 DispatcherFlink 自己内部要使用的 ResourceManager启动相关 RPC 服务等待 Flink Client 通过 Rest 接口提交 JobGraph。
2、作业提交
ApplicationMaster 启动 DispatcherDispatcher 启动 ResourceManager 和 JobMaster该步和 Session 不同JobMaster 是由 Dispatcher 拉起而不是 Client 传过来的。JobMaster 负责作业调度管理作业和 Task 的生命周期构建 ExecutionGraphJobGraph 的并行化版本调度层最核心的数据结构。
以上两步执行完后作业进入调度执行阶段。
3、作业调度执行 JobMaster 向 ResourceManager 申请 Slot 资源开始调度 ExecutionGraph。 ResourceManager 将资源请求加入等待队列通过心跳向 YarnResourceManager 申请新的 Container 来启动 TaskManager 进程。 YarnResourceManager 启动然后从 HDFS 加载 Jar 文件等所需相关资源在容器中启动 TaskManager。 TaskManager 在内部启动 TaskExecutor。 TaskManager 启动后向 ResourceManager 注册并把自己的 Slot 资源情况汇报给 ResourceManager。 ResourceManager 从等待队列取出 Slot 请求向 TaskManager 确认资源可用情况并告知 TaskManager 将 Slot 分配给哪个 JobMaster。 TaskManager 向 JobMaster 回复自己的一个 Slot 属于你这个任务JobMaser 会将 Slot 缓存到 SlotPool。 JobMaster 调度 Task 到 TaskMnager 的 Slot 上执行。