Flink架构分析之Standalone模式启动流程
概述
FLIP6 对Flink架构进行了改进,引入了Dispatcher组件集成了所有任务共享的一些组件:SubmittedJobGraphStore,LibraryCacheManager等,为了保证高可用,存在多个Dispatcher进行Master选举,同时Dispatcher必须把JobGraphs和提交job的相关jar包存储到持久化仓库中,保证failover后能恢复已经运行的任务。

本文基于flink1.7.2进行分析,解析standalone模式的启动流程与架构,首先下载该版本的源代码发行包:flink-1.7.2-src 解压并编译
cd flink-1.7.2
mvn clean install -DskipTests
cd flink-dist
mvn clean install
Jobmanager
cd target/flink-1.7.2-bin/flink-1.7.2/bin
cat start-cluster.sh

这个脚本非常清晰,先启动jobmanager然后启动taskmanager。在此我们只关注启动jobmanager部分,jobmanager的启动与HA配置有关,如果没有配置HA模式,那么仅仅是调用jobmanager.sh脚本在本机启动一个进程。
如果配置了HA模式,那么又会依据conf/master文件的配置,如果所有的host配置都是localhost或者127.0.0.1则在本机启动多个jobmanager进程,即伪分布式模式。否则就ssh到不同的host节点上启动jobmanager进程。启动jobmanager均是调用jobmanager.sh脚本,接下来我们分析一下此脚本。
cat jobmanager.sh

此脚本会根据flink配置文件conf/flink-conf.yaml中的配置设置jvm启动参数。并且把ENTRYPOINT变量设置为standalonesession然后调用flink-daemon.sh脚本。
cat flink-daemon.sh

这个脚本把调用CLass类变量设置为org.apache.flink.container.entrypoint.StandaloneJobClusterEntryPoint,然后执行以下命令在后台启动jobmanager
$JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath "`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" ${CLASS_TO_RUN} "${ARGS[@]}" > "$out" 200<&- 2>&1 < /dev/null &
所以,新架构中org.apache.flink.container.entrypoint.StandaloneJobClusterEntryPoint代替了原来的org.apache.flink.runtime.jobmanager.JobManager作为新的入口类,我们由此入手分析改进后的Standalone模式的架构:

新架构中,对session cluster和single job cluster这两种运行模式进行了代码重构,层次结构更加清晰:
ClusterEntrypoint:作为所有集群入口类的抽象父类,实现了通用的业务逻辑,并提供了createSerializableExecutionGraphStore和createDispatcherResourceManagerComponentFactory两个抽象方法供子类实现。SessionClusterEntrypoint:作为session cluster集群的直接父类,实现了ClusterEntrypoint的createSerializableExecutionGraphStore方法,采用FileArchivedExecutionGraphStore存储执行完成的任务。JobClusterEntrypoint:作为single job cluster集群的直接父类,实现了ClusterEntrypoint的createSerializableExecutionGraphStore方法,采用MemoryArchivedExecutionGraphStore存储执行完成的任务。standalone,yarn,mesos分别继承SessionClusterEntrypoint和JobClusterEntrypoint并重写了createDispatcherResourceManagerComponentFactory方法实现了session cluster和single job cluster集群入口类。
DispatcherResourceManagerComponent
为了使结果更加清晰,更易于管理。新架构中用DispatcherResourceManagerComponent封装了Dispatcher,ResourceManager,WebMonitorEndpoint三个重要的对象.以后我们单独详细分析这三个类的功能。
Taskmanager
start-cluster.sh脚本的最后一行是调用TMSlaves start启动Taskmanager,TMSlaves是定义在bin/config.sh中的函数:

调用taskmanager.sh脚本:
ENTRYPOINT=taskexecutor
"${FLINK_BIN_DIR}"/flink-daemon.sh $STARTSTOP $ENTRYPOINT "${ARGS[@]}"
最终调用了bin/flink-daemon.sh,并把启动入口类设置为org.apache.flink.runtime.taskexecutor.TaskManagerRunner:

TaskManagerRunner包装了TaskExecutor类,TaskExecutor是真正管理和执行Task的类。以后我们会单独分析。
Flink架构分析之Standalone模式启动流程的更多相关文章
- Flink 源码解析 —— Standalone session 模式启动流程
Standalone session 模式启动流程 https://t.zsxq.com/EemAEIi 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0 ...
- flink安装及standalone模式启动、idea中项目开发
安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...
- 深入理解 JBoss 7/WildFly Standalone 模式启动过程
概述 JBoss 7/WildFly Standalone 模式启动过程大致例如以下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBo ...
- Flink on Yarn模式启动流程分析
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink On Yarn 架构 Paste_Image.png 前提条件首先需要配置YARN_CONF_DI ...
- Flink on Yarn模式启动流程源代码分析
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink on yarn的启动流程可以参见前面的文章 Flink on Yarn启动流程,下面主要是从源码角 ...
- Spark环境搭建(七)-----------spark的Local和standalone模式启动
spark的启动方式有两种,一种单机模式(Local),另一种是多机器的集群模式(Standalone) Standalone 搭建: 准备:hadoop001,hadoop002两台安装spark的 ...
- springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署
知识点梳理 课堂讲义 02-SpringBoot自动配置-@Conditional使用 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载 ...
- Flink 1.3.2 Standalone模式安装
一.依赖文件安装 1.1 JDK 参见博文:http://www.cnblogs.com/liugh/p/6623530.html 二.文件准备 2.1 文件名称 flink-1.3.2-bin-ha ...
- Flink架构分析之资源分配
Task Slot Flink中每个真正执行任务的TaskManager都是一个JVM进程,其在多线程环境中执行一个或者多个子任务.为了控制一个JVM同时能运行的任务数量,flink引入了ta ...
随机推荐
- Spring Cloud Eureka 学习记录
SpringCloud版本 <groupId>org.springframework.cloud</groupId> <artifactId>spring-clou ...
- shuffle() 函数
shuffle() 方法将序列的所有元素随机排序. 以下是 shuffle()方法的语法: shuffle (lst ) 注意:此函数是无法直接访问,需要导入 random 模块,然后通过 rando ...
- ClassLoader 学习笔记
概述 在经过编译后.java文件会生成对应的.class文件,但需要执行的时候,虚拟机首先会从class文件中读取必要的信息,而这个过程则成为类加载.类加载时类的生命周期的一部分,也是它的初始步骤. ...
- ubuntu16.04安装oracle常见问题
报错信息: Err:2 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdrm2 amd64 2.4.83-1~16. ...
- selenium 无界面跑UI脚本
from selenium.webdriver.chrome.options import Options from selenium import webdriver import time chr ...
- IIC总线(集成电路总线)
三大串行总线:UART.SPI.IIC(其中SPI是由时钟沿采集数据,为同步接口:UART和IIC是由电平采集数据,为异步接口) IIC速率:工作在半双工方式,2根线(SCL和SDA) 标准:100k ...
- 数据结构与算法之链表(LinkedList)——简单实现
这一定要mark一下.虽然链表的实现很简单,且本次只实现了一个方法.但关键的是例子:单向链表的反转.这是当年我去H公司面试时,面试官出的的题目,而当时竟然卡壳了.现在回想起来,还是自己的基本功不扎实, ...
- linux ssh 连接设置
! 本文编辑中 centos ssh 无法连接
- 基于bootstrap的文本编辑器组件:Summernote
Summernote官网地址 :https://summernote.org/ 这是官网的一个例子: <!DOCTYPE html> <html lang="en" ...
- HDU - 5289 Assignment (RMQ+二分)(单调队列)
题目链接: Assignment 题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...