概述

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 clustersingle job cluster这两种运行模式进行了代码重构,层次结构更加清晰:

  • ClusterEntrypoint:作为所有集群入口类的抽象父类,实现了通用的业务逻辑,并提供了createSerializableExecutionGraphStorecreateDispatcherResourceManagerComponentFactory两个抽象方法供子类实现。

  • SessionClusterEntrypoint:作为session cluster集群的直接父类,实现了ClusterEntrypointcreateSerializableExecutionGraphStore方法,采用FileArchivedExecutionGraphStore存储执行完成的任务。

  • JobClusterEntrypoint:作为single job cluster集群的直接父类,实现了ClusterEntrypointcreateSerializableExecutionGraphStore方法,采用MemoryArchivedExecutionGraphStore存储执行完成的任务。

  • standalone,yarn,mesos 分别继承SessionClusterEntrypointJobClusterEntrypoint并重写了createDispatcherResourceManagerComponentFactory方法实现了session clustersingle 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模式启动流程的更多相关文章

  1. Flink 源码解析 —— Standalone session 模式启动流程

    Standalone session 模式启动流程 https://t.zsxq.com/EemAEIi 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0 ...

  2. flink安装及standalone模式启动、idea中项目开发

    安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...

  3. 深入理解 JBoss 7/WildFly Standalone 模式启动过程

    概述 JBoss 7/WildFly Standalone 模式启动过程大致例如以下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBo ...

  4. Flink on Yarn模式启动流程分析

    此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink On Yarn 架构 Paste_Image.png 前提条件首先需要配置YARN_CONF_DI ...

  5. Flink on Yarn模式启动流程源代码分析

    此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink on yarn的启动流程可以参见前面的文章 Flink on Yarn启动流程,下面主要是从源码角 ...

  6. Spark环境搭建(七)-----------spark的Local和standalone模式启动

    spark的启动方式有两种,一种单机模式(Local),另一种是多机器的集群模式(Standalone) Standalone 搭建: 准备:hadoop001,hadoop002两台安装spark的 ...

  7. springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署

    知识点梳理 课堂讲义 02-SpringBoot自动配置-@Conditional使用 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载 ...

  8. Flink 1.3.2 Standalone模式安装

    一.依赖文件安装 1.1 JDK 参见博文:http://www.cnblogs.com/liugh/p/6623530.html 二.文件准备 2.1 文件名称 flink-1.3.2-bin-ha ...

  9. Flink架构分析之资源分配

    Task Slot     Flink中每个真正执行任务的TaskManager都是一个JVM进程,其在多线程环境中执行一个或者多个子任务.为了控制一个JVM同时能运行的任务数量,flink引入了ta ...

随机推荐

  1. node(一)安装nodejs最新版到debian,ubuntu,mint系统

    从官网得到,测试可以使用,本机为linux mint18 官网原文链接在此 //     直接使用sudo apt install nodejs安装的版本较老,而且命令必须使用nodejs //   ...

  2. virtualbox+vagrant学习-2(command cli)-21-vagrant up命令

    Up 格式: vagrant up [options] [name|id] 这个命令根据你的Vagrantfile文件创建和配置客户机. 这是“vagrant”中最重要的一个命令,因为它是创建任何va ...

  3. 跳转到appstore下载app的链接 记录一下

    这是链接: https://itunes.apple.com/cn/app/da-dou-dou-lao-shi/id1395835036?mt=8 其中值得一提的是mt参数是啥意思 见下图:

  4. java 内存优化

    计数器pc 2.2 虚拟机栈和程序计数器一样,虚拟机栈也是线程私有的,它的生命周期与线程相同.虚拟机栈描述的是java方法执行的内存模型. 每个方法(不包含native方法)执行的同时都会创建一个栈帧 ...

  5. kubernetes 网络模型

    在Kubernetes模型中,每个Docker主机的docker0网桥都是可以路由的. 那就是说,当一个Pod部署后,集群其他主机能够不在物理主机上做端口映射就可以直接访问Pod. 有了这种说法,从网 ...

  6. HBase的简单java操作

    官方文档:http://hbase.apache.org/book.html java简单操作hbase的表 import org.apache.hadoop.conf.Configuration; ...

  7. linux系统分析工具之Blktrace

    Blktrace简介: blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求 ...

  8. 大数据入门:Maven项目的创建及相关配置

    目录 Maven项目的创建及相关配置 一.Maven的介绍 1.Maven是什么: 2.Maven作用: 3.Maven项目的目录结构: 4.Maven的三点坐标: 5.maven的pom文件: 6. ...

  9. Scala的静态方法和实例方法

    Scala的对象学习 Scala没有静态方法或静态字段,可以使用object这个语法达到相同的目的,对象定义了某个类的单个实例 object Accounts { private var lastNu ...

  10. WPF的IsSynchronizedWithCurrentItem属性

    如果两个控件都绑定到同一个源(ObservableCollection)集合视图时,该对象会自动绑定到该视图的 CurrentItem.请注意,CollectionViewSource 对象会自动同步 ...