Flink学习笔记(3)——Flink部署

2023-11-12

目录

一、Flink 部署

1.1 快速启动一个集群

1.1.1 环境配置

1.1.2 集群启动

1.1.3 向集群提交作业

1.2、部署模式

1.2.1 会话模式

1.2.2 单作业模式(Per-Job Mode)

1.2.3 应用模式(Application Mode)

 1.3、独立模式(Standalone)

1.3.1 会话模式部署

1.3.2 单作业模式部署

1.3.3 应用模式部署

1.3.4  高可用(High Availability)

1.4、YARN 模式

1.4.1 相关准备和配置

 1.4.2 会话模式部署

1.4.3 单作业模式部署

 1.4.4 应用模式部署

 1.4.5 高可用

1.5、 K8S 模式

1.6、本章总结


一、Flink 部署

1.1 快速启动一个集群

1.1.1 环境配置

Flink 是一个分布式的流处理框架,所以实际应用一般都需要搭建集群环境。我们在进行

Flink 安装部署的学习时,需要准备 3 台 Linux 机器。具体要求如下:

⚫ 系统环境为 CentOS 7.5 版本。

⚫ 安装 Java 8。

⚫ 安装 Hadoop 集群,Hadoop 建议选择 Hadoop 2.7.5 以上版本。

⚫ 配置集群节点服务器间时间同步以及免密登录,关闭防火墙。

本书中三台服务器的具体设置如下:

⚫ 节点服务器 1,IP 地址为 192.168.10.102,主机名为 hadoop102。

⚫ 节点服务器 2,IP 地址为 192.168.10.103,主机名为 hadoop103。

⚫ 节点服务器 3,IP 地址为 192.168.10.104,主机名为 hadoop104。

1.1.2 集群启动

 安装及配置过程见视频及文档

1.1.3 向集群提交作业

在上一章中,我们已经编写了词频统计的批处理和流处理的示例程序,并在开发环境的模 拟集群上做了运行测试。现在既然已经有了真正的集群环境,那接下来我们就要把作业提交上 去执行了。

本节我们将以流处理的程序为例,演示如何将任务提交到集群中进行执行。具体步骤如下。

1. 程序打包

(1)为方便自定义结构和定制依赖,我们可以引入插件 maven-assembly-plugin 进行打包。 在 FlinkTutorial 项目的 pom.xml 文件中添加打包插件的配置,具体如下:(可以不添加)

<build> 
 <plugins> 
 <plugin> 
 <groupId>org.apache.maven.plugins</groupId> 
 <artifactId>maven-assembly-plugin</artifactId> 
 <version>3.0.0</version> 
 <configuration> 
 <descriptorRefs> 
 <descriptorRef>jar-with-dependencies</descriptorRef> 
 </descriptorRefs> 
 </configuration> 
 <executions> 
 <execution> 
 <id>make-assembly</id> 
 <phase>package</phase> 
 <goals> 
 <goal>single</goal> 
 </goals> 
 </execution> 
 </executions> 
 </plugin> 
 </plugins> 
</build> 

 

 

 

1.2、部署模式

1.2.1 会话模式

会话模式其实最符合常规思维。我们需要先启动一个集群,保持一个会话,在这个会话中 通过客户端提交作业,如图 3-10 所示。集群启动时所有资源就都已经确定,所以所有提交的 作业会竞争集群中的资源。

这样的好处很明显,我们只需要一个集群,就像一个大箱子,所有的作业提交之后都塞进 去;集群的生命周期是超越于作业之上的,铁打的营盘流水的兵,作业结束了就释放资源,集 群依然正常运行。当然缺点也是显而易见的:因为资源是共享的,所以资源不够了,提交新的 作业就会失败。另外,同一个 TaskManager 上可能运行了很多作业,如果其中一个发生故障导 致 TaskManager 宕机,那么所有作业都会受到影响。

我们在 3.1 节中先启动集群再提交作业,这种方式其实就是会话模式。

会话模式比较适合于单个规模小、执行时间短的大量作业。

1.2.2 单作业模式(Per-Job Mode)

会话模式因为资源共享会导致很多问题,所以为了更好地隔离资源,我们可以考虑为每个 提交的作业启动一个集群,这就是所谓的单作业(Per-Job)模式,如图 3-11 所示。

 

单作业模式也很好理解,就是严格的一对一,集群只为这个作业而生。同样由客户端运行 应用程序,然后启动集群,作业被提交给 JobManager,进而分发给 TaskManager 执行。作业 作业完成后,集群就会关闭,所有资源也会释放。这样一来,每个作业都有它自己的 JobManager

管理,占用独享的资源,即使发生故障,它的 TaskManager 宕机也不会影响其他作业。

这些特性使得单作业模式在生产环境运行更加稳定,所以是实际应用的首选模式。

需要注意的是,Flink 本身无法直接这样运行,所以单作业模式一般需要借助一些资源管 理框架来启动集群,比如 YARN、Kubernetes。

1.2.3 应用模式(Application Mode)

前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager

的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给

JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的 资源消耗。

39

所以解决办法就是,我们不要客户端了,直接把应用提交到 JobManger 上运行。而这也就 代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这 个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所 谓的应用模式,如图 3-12 所示。

应用模式与单作业模式,都是提交作业之后才创建集群;单作业模式是通过客户端来提交 的,客户端解析出的每一个作业对应一个集群;而应用模式下,是直接由 JobManager 执行应 用程序的,并且即使应用包含了多个作业,也只创建一个集群。

总结一下,在会话模式下,集群的生命周期独立于集群上运行的任何作业的生命周期,并 且提交的所有作业共享资源。而单作业模式为每个提交的作业创建一个集群,带来了更好的资 源隔离,这时集群的生命周期与作业的生命周期绑定。最后,应用模式为每个应用程序创建一 个会话集群,在 JobManager 上直接调用应用程序的 main()方法。

我们所讲到的部署模式,相对是比较抽象的概念。实际应用时,一般需要和资源管理平台 结合起来,选择特定的模式来分配资源、部署应用。接下来,我们就针对不同的资源提供者 (Resource Provider)的场景,具体介绍 Flink 的部署方式。

 

 1.3、独立模式(Standalone)

独立模式(Standalone)是部署 Flink 最基本也是最简单的方式:所需要的所有 Flink 组件, 都只是操作系统上运行的一个 JVM 进程。

独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果 资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式 一般只用在开发测试或作业非常少的场景下。

另外,我们也可以将独立模式的集群放在容器中运行。Flink 提供了独立模式的容器化部 署方式,可以在 Docker 或者 Kubernetes 上进行部署。

1.3.1 会话模式部署

可以发现,独立模式的特点是不依赖外部资源管理平台,而会话模式的特点是先启动集群、 后提交作业。所以,我们在第 3.1 节用的就是独立模式(Standalone)的会话模式部署。

1.3.2 单作业模式部署

在 3.2.2 节中我们提到,Flink 本身无法直接以单作业方式启动集群,一般需要借助一些资 源管理平台。所以 Flink 的独立(Standalone)集群并不支持单作业模式部署。

1.3.3 应用模式部署

1.3.4  高可用(High Availability)

分布式除了提供高吞吐,另一大好处就是有更好的容错性。对于 Flink 而言,因为一般会 有多个 TaskManager,即使运行时出现故障,也不需要将全部节点重启,只要尝试重启故障节 点就可以了。但是我们发现,针对一个作业而言,管理它的 JobManager 却只有一个,这同样 有可能出现单点故障。为了实现更好的可用性,我们需要 JobManager 做一些主备冗余,这就 是所谓的高可用(High Availability,简称 HA)。

我们可以通过配置,让集群在任何时候都有一个主 JobManager 和多个备用 JobManagers, 如图 3-13 所示,这样主节点故障时就由备用节点来接管集群,接管后作业就可以继续正常运 行。主备 JobManager 实例之间没有明显的区别,每个 JobManager 都可以充当主节点或者备 节点。

 

 

1.4、YARN 模式

独立(Standalone)模式由 Flink 自身提供资源,无需其他框架,这种方式降低了和其他 第三方资源框架的耦合性,独立性非常强。但我们知道,Flink 是大数据计算框架,不是资源 调度框架,这并不是它的强项;所以还是应该让专业的框架做专业的事,和其他资源调度框架 集成更靠谱。而在目前大数据生态中,国内应用最为广泛的资源管理平台就是 YARN 了。所 以接下来我们就将学习,在强大的 YARN 平台上 Flink 是如何集成部署的。

整体来说,YARN 上部署的过程是:客户端把 Flink 应用提交给 Yarn 的 ResourceManager, Yarn 的 ResourceManager 会向 Yarn 的 NodeManager 申请容器。在这些容器上,Flink 会部署

JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业 所需要的 Slot 数量动态分配 TaskManager 资源。

1.4.1 相关准备和配置

 

 1.4.2 会话模式部署

1.4.3 单作业模式部署

 

  

 1.4.4 应用模式部署

 

 1.4.5 高可用

 

 

1.5、 K8S 模式

容器化部署是如今业界流行的一项技术,基于 Docker 镜像运行能够让用户更加方便地对 应用进行管理和运维。容器管理工具中最为流行的就是 Kubernetes(k8s),而 Flink 也在最近 的版本中支持了 k8s 部署模式。基本原理与 YARN 是类似的,具体配置可以参见官网说明, 这里我们就不做过多讲解了

1.6、本章总结

Flink 支持多种不同的部署模式,还可以和不同的资源管理平台方便地集成。本章从快速 启动的示例入手,接着介绍了 Flink 中几种部署模式的区别,并进一步针对不同的资源提供者 展开讲解了具体的部署操作。在这个过程中,我们不仅熟悉了 Flink 的使用方法,而且接触到 了很多内部运行原理的知识。

关于 Flink 运行时组件概念的作用,以及作业提交运行的流程架构,我们会在下一章进一 步详细展开

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flink学习笔记(3)——Flink部署 的相关文章

随机推荐

  • 比C语言还快20%!Mojo首个大模型开放下载,性能达Python版250倍

    明敏 发自 凹非寺量子位 公众号 QbitAI 专为AI而来的新语言Mojo 推理LLaMA2性能比Python提升250倍 比C语言也要快上20 上周五才开放下载 Mojo这么快就自证实力了 要知道 之前官方号称Mojo可以比Python
  • C语言 如何将一个数组a赋给数组b

    采用遍历赋值的方法
  • LVDS接口液晶屏定义(lcd)

    转载于 https blog csdn net linphusen article details 6389032 LVDS接口液晶屏定义 LVDS接口又称RS 644总线接口 20PIN单6定义 1 电源2 电源3 地 4 地 5 R0
  • 丁鹿学堂:前端异步进阶之Rxjs的使用

    响应式编程 Rx 全称Reactivbe Extension 指的是实践响应式编程的一套工具 Rx其实是一个大家庭 针对不同的语言都有适配 最早是微软的c 我们前端关注的是js余元 就是RxJS RxJS 的特点 数据流抽象了很多现实问题
  • pandas 数据类型之 DataFrame

    Python 官网 https www python org 这里 才 python 前沿 可惜是英文原版 所以 我要练习英文阅读 我的CSDN主页 My Python 学习个人备忘录 我的HOT博 老齐教室 自学并不是什么神秘的东西 一个
  • 初涉Rx套餐 之RxBinding(让你的事件流程更清晰)

    转载请注明出处 王亟亟的大牛之路 最近下班回家都在WOW 周末就爆肝 感觉人都要GO DIE了 昨天下午看了看RxBinding相关的功能感觉还是蛮强大的 所提供的API也是相当丰富 基本Rx套餐都是互通的 然后就把之前的Rx例子翻出来重新
  • AE与AO的区别

    在ArcGis9 0之前 ArcObject还不是一个独立的产品 一直捆绑在Desktop产品中 只要你购买了desktop产品中的一个 你就可以使用arcboject开发 从ArcGis9 0开始 ESRI公司推出了ArcGis Engi
  • web自动化测试框架落地实施全过程-测试环境搭建 (Selenium+Python)

    一 什么是web自动化测试 Web自动化测试是指使用自动化工具模拟用户在Web浏览器中执行的操作 通过编写脚本来自动化执行测试用例 以验证Web应用程序的功能 性能和兼容性等方面的质量 其主要目的是降低测试成本和时间 并提高测试效率和准确性
  • 使用selenium启动谷歌Chrome浏览器

    1 首先pip安装selenium pip install selenium 2 下载chromedriver驱动 1 打开自己电脑上的谷歌浏览器 查看版本号 然后chromedriver的版本一定要与Chrome的版本一致 不然下载不对应
  • 格式化并挂载ubi文件系统过程详解

    1 UBI文件系统介绍 1 UBI文件系统是基于MTD子系统的 内核必须要先支持MTD子系统 2 UBI文件系统适用于Nand flash 是可读写的文件系统 2 内核中使能UBI 2 1 使能UBI设备驱动 Location
  • 小问题解决方案

    目录 error CS0246 未能找到类型或命名空间名称 DllImport 是否缺少 using 指令或程序集引用 其他信息 对 PInvoke 函数 useQtDllTest1 useQtDllTest1 Form1 screenSh
  • oracle用户权限

    oracle用户权限 sys 数据库超级用户 必须以sysdba的身份进行登录的 1 创建新用户 create user user name identified by password default tablespace tablesp
  • ChatGPT调研报告:发展到今天这一步,哪个职业最慌?

    ChatGPT的流行 让AIGC受到了空前的关注 AIGC 即 AI Generated Content 是指利用人工智能技术来生成内容 比如AI写作 AI绘画 AI编程 AI语音合成等 就在3月29日 一封来自美国研究机构Future o
  • zabbix 调用api 批量删除主机

    脚本名称 zabbix api py 脚本内容如下 usr bin env python coding utf 8 import json import sys import urllib2 import argparse from url
  • TypeScript中any、unknown、never和void有什么区别?

    any 任意类型的变量 unknown 表示未知类型 unknown与any类似 但使用前必须进行断言或守卫 never 永不存在的值的类型 void 无任何类型 没有类型 用于函数时 never表示函数用于执行不到返回值那一步 抛出异常或
  • 植物图像识别python_python实现图像识别功能

    本文实例为大家分享了python实现图像识别的具体代码 供大家参考 具体内容如下 usr bin env python from PIL import Image import pytesseract url img denggao jpe
  • 什么是IDS?

    1 什么是IDS IDS是 入侵检测系统 intrusion detection system 简称 IDS 是一种对网络传输进行即时监视 在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备 它与其他网络安全设备的不同之处便在于 I
  • Swagger-使用教程(详细)

    Swagger Swagger官网 https swagger io Swagger是一款 RESTful 风格的 Web 服务框架 那么问题来了 什么是RESTful RESTFUL是一种网络应用程序的设计风格和开发方式 基于HTTP 可
  • ComSec HW6 Hash

    11 1 安全 Hash 函数需要具有那些特性 H能用于任何大小的数据分组 H产生定长输出 对任意给定的x H x 要相对易于计算 使得软硬件实现都实际可行 单向性 对任意给定的码y 寻求x使得H x y在计算上不可行 弱抗碰撞性 任意给定
  • Flink学习笔记(3)——Flink部署

    目录 一 Flink 部署 1 1 快速启动一个集群 1 1 1 环境配置 1 1 2 集群启动 1 1 3 向集群提交作业 1 2 部署模式 1 2 1 会话模式 1 2 2 单作业模式 Per Job Mode 1 2 3 应用模式 A