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 应用模式(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 运行时组件概念的作用,以及作业提交运行的流程架构,我们会在下一章进一 步详细展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值