架构图

Job Managers, Task Managers, Clients

  • JobManager(Master)

    • 用于协调分布式执行。它们用来调度task,协调检查点,协调失败时恢复等。
    • Flink运行时至少存在一个JobManager。
    • 一个高可用的运行模式会存在多个JobManager,它们其中有一个是leader,而其他的都是standby。
  • TaskManager(Worker)
    • 用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和data stream的交换。
    • Flink运行时至少会存在一个TaskManager。
  • TaskManager连接到JobManager,告知自身的可用性进而获得任务分配。
  • 客户端不是运行时和程序执行的一部分。但它用于准备并发送dataflow给master,然后户端断开连接或者维持连接以等待接收计算结果。
  • JobManager和TaskManager可以以如下方式中的任意一种启动:
    • Standalone cluster
    • Yarn
    • Mesos
    • Container(容器, 如 由K8S管理的Docker集群)

Standalone 模式

  • 流程如上所示
  • 任务提交命令:
    • bin/flink run -c mainclass jar_path
    • webui 提交(傻瓜式)

On Yarn 模式

  • 两种运行模式

    • Yarn-session 模式

      • 该模式是预先在yarn上面划分一部分资源给flink集群用,flink提交的所有任务,共用这些资源。
      • 示意图
      • 任务提交
        • 先启动一个yarn-session,并指明分配的资源。
        • 命令:
          • ./yarn-session.sh -n 3 -jm 1024 -tm 1024 /opt/sxt/flinkTest.jar
          • -n 容器个数
          • -jm jobmanager 进程内存大小
          • -tm 指明每个 taskmanager 的进程内存大小
        • 启动yarn-session后,就可以提交任务了
        • . /flink run -m 节点:端口 jar 文件目录
        • 停止yarn上的 flink 集群
          • 先找到 application_id
          • 然后执行命令:
            • yarn application -kill application_id
    • Single job 模式

      • 该模式是每次提交任务,都会创建一个新的flink集群

      • 任务之间互相独立,互不影响,方便管理

      • 任务执行完成之后,flink集群也会消失

      • 示图:

      • 任务提交命令:

        • ./flink rum -m yarn-cluster -yn 并行度 jar文件路径

          • -m:

            • 后面跟的是yarn-cluster,不需要指明地址。
            • 这是由于Single job模式是每次提交任务会新建flink集群,所以它的jobmanager是不固定的。
          • -yn:
            • 指明taskmanager个数。
            • 其余参数可使用:./flink -h 来查看
  • 运行原理

    • flink on yarn 内部实现图

    • 步骤1

      • 当启动一个新的 Flink YARN Client会话,客户端首先会检查所请求的资源(容器和内存)是否可用。
      • 之后,它会上传包含了 Flink 配置文件和 jar包到 HDFS.
    • 步骤2

      • 客户端的请求一个container资源去启动 ApplicationMaster 进程
    • 步骤3

      • ResourceManager选一台NodeManager机器启动AM。
      • 注意点1:
        • 因为客户端已经将配置文件和jar包作为容器的资源注册了,所以 NodeManager 会负责准备容器做一些初始化工作(例如,下载文件)。
        • 一旦这些完成了,ApplicationMaster (AM) 就启动了。
      • 注意点2:
        • JobManager 和 AM 运行在同一个容器中。
        • 一旦它们成功地启动了,AM 知道 JobManager 的地址(它自己)。
        • 它会为 TaskManager 生成一个新的 Flink 配置文件(这样它们才能连上 JobManager)。
        • 该文件也同样会上传到 HDFS。另外,AM 容器同时提供了 Flink 的 Web 界面服务。
    • 步骤4

      • AM 开始为 Flink 的 TaskManager 分配容器(container),在对应的nodemanager上面启动taskmanager
    • 步骤5

      • 初始化工作,从 HDFS 下载 jar 文件和修改过的配置文件。
      • 一旦这些步骤完成了,Flink 就安装完成并准备接受任务了。

flink笔记(三) flink架构及运行方式的更多相关文章

  1. Flink学习笔记-新一代Flink计算引擎

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  2. Flink学习笔记:Flink Runtime

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  3. Flink(三)Flink开发IDEA环境搭建与测试

    一.IDEA开发环境 1.pom文件设置 <properties> <maven.compiler.source>1.8</maven.compiler.source&g ...

  4. 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?

    本文为 Apache Flink 新版本重大功能特性解读之 Flink SQL 系列文章的开篇,Flink SQL 系列文章由其核心贡献者们分享,涵盖基础知识.实践.调优.内部实现等各个方面,带你由浅 ...

  5. 开篇 | 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?

    本文为 Apache Flink 新版本重大功能特性解读之 Flink SQL 系列文章的开篇,Flink SQL 系列文章由其核心贡献者们分享,涵盖基础知识.实践.调优.内部实现等各个方面,带你由浅 ...

  6. Flink 笔记(一)

    简介 Flink是一个低延迟.高吞吐.统一的大数据计算引擎, Flink的计算平台可以实现毫秒级的延迟情况下,每秒钟处理上亿次的消息或者事件. 同时Flink提供了一个Exactly-once的一致性 ...

  7. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  8. 8、Flink Table API & Flink Sql API

    一.概述 上图是flink的分层模型,Table API 和 SQL 处于最顶端,是 Flink 提供的高级 API 操作.Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时 ...

  9. Twitter 新一代流处理利器——Heron 论文笔记之Heron架构

    Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...

随机推荐

  1. js去后台传递的值

    function test(){ var param = [[${list}]];//以集合为例 } 如果list里面是实体类那么就需要重写toString,或者转为json

  2. 新闻网大数据实时分析可视化系统项目——11、MySQL安装

    1.修改yum源 鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源改为国内的Yum源,这里选择使用比较多的阿里云源.具体修改方法可以参考此连接 2.在线安装mysql 通过yum在线mysq ...

  3. CSS 常用操作

    1.对齐 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  4. day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)

    1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...

  5. redis-Hash(哈希表)

    Redis hash 是一个string类型的field和value的映射表,它的添加.删除操作都是O(1)(平均).hash特别适用于存储对象,将一个对象存储在hash类型中会占用更少的内存,并且可 ...

  6. 28 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,.   思路: 解法1:对于小规模数据,可以采用类似前题的快速排序思路 ...

  7. formatTime() 时间戳,返回数据是计算距离现在的时间

    const formatTime=function(tiem) {//时间转换   const timestamp = Date.now();   return function (tiem) {   ...

  8. SciPy 特殊函数

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. JSONObject.fromObject() 转string时,实体里面的时间错乱的问题

    在把要入库的数据实体转成JSON字符串发给kafka的时候,出现了问题,转换完以后,就变成这样子的了,真的是第一次见到这种,真的是长见识了 然后百度了一下:https://www.cnblogs.co ...

  10. Arm-Linux 移植 Ubuntu

    前言: 这篇文章介绍如何构建一个完整基于ARM的Ubuntu系统. 由于改文章当初写的时候是发表在国外产品论坛上面,故保留了原文内容. 使用到的硬件平台:Geekbox 补充说明: 虽然Geekbox ...