栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

02- Flink 部署、运行架构

02- Flink 部署、运行架构

Flink 部署、运行架构
  • 1. Flink 部署
  • 2. 运行架构
    • 四大组件
      • Job Manager
      • Task Manager
      • Resource Manager
      • Dispatcher
    • 作业提交流程
    • 任务调度原理
    • Slot 和 任务调度
      • 并行度
      • TaskManager 和 Slot
      • Slot 和并行度的关系
    • 程序结构和数据流图
    • 执行图(ExecutionGraph)
    • 数据传输形式
    • 任务链(Operator Chains)

1. Flink 部署

       Flink有多种部署方案:standalone 方式、yarn模式,k8s部署。

       由于环境限制,这里只展示 standalone 单机部署方案。

       首先下载最新版,然后进行解压。


       解压后,目录如下所示:

  • bin:存放启动 flink 的脚本
  • conf:存放 flink 配置文件
  • example:存放flink的使用示例
  • lib:存放flink依赖的jar
  • log:存放flink的日志文件
  • opt: 第三⽅备⽤依赖
  • plugins:存放编译好的数据同步以依赖

       通过start-cluster.sh启动 flink。

       flink默认占用本机的 8081 端口,可以在配置文件中更改端口。

       通过浏览器打开,可以看到如下主页。

       向Flink 提交一个Word Count任务,可以通过Flink的主页提交,也可以通过命令进行提交。

       我们通过如下命令,提交flink提供的示例。

       ./bin/flink run examples/streaming/WordCount.jar


       打开主页,可以看到一个已经完成了的job。

       点击即可进入该job的主页,查看job的详细信息。

2. 运行架构 四大组件

       Flink有如下四大组件:

  • JobManager(作业管理器)
  • TaskManager(任务管理器)
  • ResourceManager(资源管理器)
  • Dispacher(分发器)
Job Manager
  • 控制应用程序执行的主进程,每个应用程序都会被一个 Job Manager 所控制执行。
  • JobManager 会先接收到要执行的应用程序,这个应用程序会包括:作业图(JobGraph),逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其他资源的JAR包。
  • JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被交租“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。
  • JobManager会向资源管理器请求执行任务必要的资源,也就是任务管理器上的插槽(slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的任务管理器。在运行过程中,JobManager会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。
Task Manager
  • Flink 中的工作进程。通常在 Flink 中会有多个 TaskManager 运行,每一个 TaskManager 都包含了一个数量的插槽(slots)。插槽的数量限制了 TaskManager 能够执行的任务数量。
  • 启动之后,TaskManager 会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager 就会将一个或多个插槽提供给 JobManager调用。JobManager 就可以向插槽分配任务(tasks)来执行了。
  • 在执行过程中,一个 TaskManager 可以跟其他运行同一应用程序的 TaskManager 交换数据。
Resource Manager
  • 主要负责管理任务管理器(Task Manager)的插槽(slot),TaskManager 插槽是 Flink 中定义的处理资源单元。
  • Flink 为不同的环境和资源管理工具提供了不同的资源管理器,比如 Yarn、Mesos、K8s以及 standalone 部署。
  • 当 JobManager 申请插槽资源时,ResourceManager 会将有空闲插槽的 TaskManager 分配给 JobManager。如果 Resource Manager 没有足够的插槽来满足 JobManager 的请求,它还可以想资源提供平台发起会话,以提供 TaskManager 进程的容器。
Dispatcher
  • 可以跨作业运行,它为应用题叫提供了REST接口。
  • 当一个应用被提交执行时,分发器就会启动并将应用移交给一个 JobManager。
  • Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。
  • Dispatcher 在架构中可能并不是必须的,这取决于应用提交的方式。
作业提交流程


       yarn环境下,作业提交流程如下:

任务调度原理

Slot 和 任务调度 并行度

       一个特定算子的子任务(subtask)的个数称之为其并行度(parallelism)。
       一般情况下,一个 stream 的并行度,可以认为就是其所有算子中最大的并行度。

TaskManager 和 Slot

       Flink中每一个 TaskManager 都是一个 JVM 进程,它可能会在独立的线程上至下一个任务或多个子任务。

       为了控制一个 TaskManager 能接收多少个 task,TaskManager 通过 task slot 来进行控制(一个 TaskManager 至少有一个 slot)。


       默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务。这样的结果就是,一个 slot 可以保存作业的整个管道。

       Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力。

Slot 和并行度的关系

       并行子任务的分配如下所示:

程序结构和数据流图
  • 所有的 Flink 程序都是由三部分组成:Source、Transformation、Sink。
  • Source 负责读取数据源,Transformation 利用各种算子进行处理加工,Sink 负责输出。
  • 在运行时,Flink 上运行的程序会被映射成“逻辑数据流”(dataflows),它包好了这三部分。
  • 每一个 dataflow 以一个或多个 sources 开始以一个或多个 sink 结束。dataflow 类似于任意的有向无环图(DAG)
  • 在大部分情况下,程序中的转换运算(transformations)跟 dataflow 中的算子(operator)是一一对应的关系。
执行图(ExecutionGraph)
  • Flink 中的执行图可以分成以下几层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图。
  • StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。
  • JobGraph:StreamGraph 经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化未,将多个符合条件的节点 chain 在一起作为一个节点。
  • ExecutionGraph:JobManager 根据 JobGraph 生成 ExecutionGraph。ExecutionGraph 是 JobGraph 的并行化版本,是调度层最核心的数据结构。
  • 物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个 TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

数据传输形式
  • 一个程序中,不同的算子可能具有不同的并行度。
  • 算子之间传输数据的形式可以是one-to-one(forwarding)的模式也可以是redistributing的模式,具体是哪一种形式,取决于算子的种类。
  • one-to-one:stream 维护着分区以及元素的顺序(比如 source 和 map 之间)。着意味着 map 算子的字任务看到的元素的个数以及顺序跟 source 算子的字任务生产的元素的个数、顺序相同。map、filter、flatMap 等算子都是 one-to-one 的对应关系。
  • Redistributing:stream 的分区会发生改变。每一个算子的子任务依据所选择的transformation发送数据到不同的目标任务。例如,keyBy 基于 hashcode 重分区、而 boradcast 和 rebalance 会随机重新分区,这些算子都会引起 redistribute 过程,而 redistribute 过程就类似于 Spark 中的 shuffle 过程。
任务链(Operator Chains)
  • Flink 采用了一种称为任务链的优化技术,可以在特定条件下减少本地通信的开销。为了满足任务链的要求,必须将两个或多个算子设为相同的并行度,并通过本地转发(local forward)的方式进行连接。
  • 相同并行度的one-to-one操作,Flink 这样相连的算子链接在一起形成一个 task,原来的算子成为里面的 subtask。
  • 并行度相同、并且是 one-to-one 操作,两个条件缺一不可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号