概述
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 ...
随机推荐
-
C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止暴力破解密码、提高大型信息系统安全
几十万人使用的系统.覆盖全国.每天营业额上好几个亿的.若信息安全方面太薄弱了.那将会是致命的打击.甚至威胁到企业的正常运转.从国家层面到企业级别大家都在重视信息的安全.可控. 运行速度慢一点点可以忍受 ...
-
第一个PHP程序-HelloWorld
<?php //echo输出字符串 echo "Hello php!你好 php" ; 以上程序输出结果为:Hello php!你好 php
-
引用参数,值参数,ref,out
1,一个参数只有在引用的时候才能改变其值,这是一种情况 2,一个参数在引用后要永久的改变其值(可以用返回参数的形式) 3,多个参数在引用后要永久的改变其值或者多个参数中的部分(返回参数就适合了,因为只 ...
-
php面试题之一——PHP核心技术(高级部分)
一.PHP核心技术 1.写出一个能创建多级目录的PHP函数(新浪网技术部) <?php /** * 创建多级目录 * @param $path string 要创建的目录 * @param $m ...
-
【COGS &; USACO】896. 圈奶牛(凸包)
http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...
-
获取app版本号
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString *name = [infoDiction ...
-
在android的spinner中,实现取VALUE值和TEXT值
为了实现在android的spinner实现取VALUE值和TEXT值,我尝试过好些办法,在网上查的资料,都是说修改适配器,刚开始我也是通过修改适配器的方法来做的,但是如果一个activity有多个s ...
-
rsyslog ~ 波浪号
<pre name="code" class="html">Using negation can be useful if you would li ...
-
HDU 5741 Helter Skelter
离线处理+扫描线.题意很容易转化:若干个矩形形成并集,询问一些点是否在并集中? 官方题解不是这样做的....那种做法效率更高,暂时还不会.我这样是4500ms G++过的,C++TLE...... 区 ...
-
SA 后缀数组
SA 后缀数组 首先一定要确定\(SA\)是个什么东西 \(SA[i]\)表示的是排名为\(i\)的后缀是哪一个 至于后缀\(i\)的排名是多少,那个是\(rank[i]\) 当然啦 最最最难懂的就是 ...