概述

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. vue async/await同步 案例

    1.async/await场景 这是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面时. 2.名词解释 >async async的用法,它作为一个关键字放到函数 ...

  2. BZOJ3270:博物馆(高斯消元)

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  3. Java基础加强之并发(四)synchronized关键字

    并发系列参考文章http://www.cnblogs.com/skywang12345/p/3323085.html#3907193 synchronized原理 在java中,每一个对象有且仅有一个 ...

  4. openfalcon-0.2 配置

    hbs 配置文件 { "debug": true, "database": "openfalcon:123456@tcp(172.16.230.188 ...

  5. [luogu1600] 天天爱跑步

    题面 ​ 直接写正解吧, 不想再写部分分了, 对于\(u\)和\(v\), 我们可以将它拆成两条路径, \(u\)到\(lca(u, v)\)和\(lca(u, v)\)到v, 在这里只分析从\(u\ ...

  6. Node.js 连接 MongoDB-7

    先安装模块: npm install --save mongodb 当然,首先你要打开mongodb服务端: mongod --bind_ip 127.0.0.1 创建数据库 要在 MongoDB 中 ...

  7. leetcode 39. Combination Sum 、40. Combination Sum II 、216. Combination Sum III

    39. Combination Sum 依旧与subsets问题相似,每次选择这个数是否参加到求和中 因为是可以重复的,所以每次递归还是在i上,如果不能重复,就可以变成i+1 class Soluti ...

  8. openstack 镜像初始化root登录密码

    在创建虚拟机的时候 如下: #!/bin/sh passwd root<<EOF engine engine EOF huangyi替换成你的密码 注意下面的配置驱动一定要勾上,不然虚拟机 ...

  9. java面向对象之个人总结

    面向对象有三大特性:继承,封装,多态 1.继承: (1)继承的特点:A,java支持单根继承,不支持多根继承 B,java支持多层继承(继承体系) (2)细节注意:A.子类只能继承父类的非私有成员(成 ...

  10. Mybatis主线流程源码解析

     Mybatis的基础使用以及与Spring的相关集成在官方文档都写的非常详细,但无论我们采用xml还是注解方式在使用的过程中经常会出现各种奇怪的问题,需要花费大量的时间解决. 抽空了解一下Mybat ...