flink on yarn工作提交流程
示意图
流程如下:
- Client向Dispatch而发起请求,Dispatch而向yarn提交job
- Yarn的NN创建一个container,启动Application Master(AM)
- ApplicationMaster在本地启动一个Resource Manager和Job Manager
- Job manager根据StreamGraph生成的ExecutionGraphy以及物理执行计划向Flink Resource Manager申请slot
- 如果没有足够的slot,那么Flink Resources Manager向Yarn Resource Manager申请Container
- 创建Container之后,Container向Flink Resource Manager和JobManager注册
- 注册之后Flink Resource manager分配slot,JobManager分配Task
几点分工注意:
- 集群资源掌控在yarn的老大NN中,但是flink的client不直接和yarn的NN打交道,而是通过Application Master(AM)中的Resources Manager获取资源
- AM中的Resource Manager(RM)负责向yarn申请资源(Container),分配slot
- Job Manager向RM申请资源,分配task,并负责这些资源的管理
flink三层图概述
上面提到了这样一句话“Job manager根据Graph生成的ExecutionGraphy以及物理执行计划”,这涉及flink的三层图结构。
-
示意图如下
-
一个flink的DAG生成计算图大致经历一下三个过程:
- StreamGraph :逻辑层面的计算拓扑结构
- 按照用户代码的执行顺序向 StreamExecutionEnvironment 添加 StreamTransformation 构成流式图。
- JobGraph :经过部分吃屎和和优化处理的任务图
- JobGraph 从 StreamGraph 生成,将可以串联合并的节点进行合并,设置节点之间的边,安排资源共享 slot 槽位和放置相关联的节点,上传任务所需的文件,设置检查点配置等
- ExecutionGraph :包含了任务具体执行内容的、最贴近底层实现的执行图。
- StreamGraph :逻辑层面的计算拓扑结构