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 ...
随机推荐
- Apache服务器下使用 ab 命令进行压力测试
ab是Apache超文本传输协议(HTTP)的性能测试工具. 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 ...
- TensorFlow函数(七)tf.argmax()
tf.argmax(input, dimension, name=None) 参数: input:输入数据 dimension:按某维度查找. dimension=0:按列查找: dimension= ...
- nginx 查看版本 查看模块
如图,简单说 大V看模块,小v看版本. nginx -v //查看版本号 nginx -V //查看版本号和加载模块明细
- Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办?
问题1:Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办? 答:在word2010中,菜单栏中最左侧选“文件”->“选 ...
- 初识Qt简单动画
Qt提供了类QPropertyAnimation来实现图片的一些简单的动画操作效果. 1.新建一个Qt空项目,同时添加资源文件,并在资源文件中添加图片路径.之后在main.cpp函数中添加以下代码 # ...
- (转)使用 Nmon 监控 Linux 的系统性能
看到一个使用Nmon的文章,写的很基础,适合新手,转载之.下面是原文的信息: 作者:Hitesh Jethva 译者:sonofelice 校对:wxy 传送门:linux.cn/article-68 ...
- P1481 魔族密码
题目描述 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 花花:……咦好冷我们现在 ...
- canvas 绘制刮刮卡
思路=> 用div来展示刮奖结果,用canvas绘制刮奖前展示的图片或者文字:将canvas叠在div上方,刮奖是只需要操作canvas配合touch事件即可简单完成. canvas刮奖可以用g ...
- mac上ssh工具,包含简易的文件传输功能
最近需要在mac上连ssh,但是之前在mac上用的都是简易的SSH Shell,没有找到传输文件的功能. 这时候就非常想念win上的winscp,有个界面,传点东西还是很直观的. 几经搜寻,终于找到一 ...
- python二进制处理详述(转)
python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是以1个字节为单位的. import struct a=12.34 # ...