第3章 flink安装与部署

2.1flink集群部署

stanalone模式是指在裸机上运行flink,通过自身的资源调度器来运行,一般这种方式不推荐,flink集群一般与其它集群,像spark,Hadoop等共存,所以在底层需要有一套资源调度管理系统,不然容易造成资源竞争或者资源浪费。

1)先下载flink的安装文件。

wget xxx/flink-1.14.0-bin-scala_2.12.tgz

2)解压并修改配置文件

tar -zxvf flink-1.14.0-bin-scala_2.12.tgz

cd flink-1.14.0/conf

vim flink-conf.yaml

修改这个参数为本机主机名:jobmanager.rpc.address: hadoop200

3)分发配置文件

修改/conf/slaves文件

hadoop200

hadoop201

hadoop202

分发给其它的机器,xsync flink-1.14.0

3)启动

进入到bin目录

./start-cluster.sh

然后查看启动的进程

image-20211004210951689

在配置文件conf/slaves中,如果配置了多个机器,那么多个机器上就会有TaskManagerRunner进程。我们可以通过localhost:8081web页面来对flink进行管理。

image-20211004211351296

通过web界面我们可以发现,机器中有一个TaskManager,有一个TaskSlots,先不用管他的意思,只是知道有一个TaskManager和一个Slots。

4)提交任务

先通过nc监听7777端口,然后执行下面的命令

./flink run -c flink.StreamWordCount -p 1 gjxy-1.0-SNAPSHOT.jar --host localhost --port 7777

Job has been submitted with JobID 579a07caf488766e6ef29956e56b5d2d

image-20211004212304066

通过nc输入数字,然后在TaskManager中发现有输出。

image-20211004212743458

关于上面中提到的各种概念,将在下一章中进行说明。

2.2flink部署模式

flink为不同场景下提供了不同的部署模式,主要有一下三种:

  • 会话模式
  • 单作业模式
  • 应用模式

主要区别在于:集群的声明周期以及资源的分配方式;以及应用的main方法到底在哪里执行——客户端还是JobManager。

2.1.1会话模式

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

2.1.2单作业模式

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

2.1.3应用模式

前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的资源消耗。 所以解决办法就是,我们不要客户端了,直接把应用提交到 JobManger 上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所谓的应用模式。

2.3 Standalone模式(不常用)

独立模式(Standalone)是部署 Flink 最基本也是最简单的方式:所需要的所有 Flink 组件,都只是操作系统上运行的一个 JVM 进程。 独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式一般只用在开发测试或作业非常少的场景下。另外,我们也可以将独立模式的集群放在容器中运行。 Flink 提供了独立模式的容器化部署方式,可以在 Docker 或者 Kubernetes 上进行部署。

2.3.1会话模式部署

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

2.3.2单作业模式部署

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

2.3.3应用模式部署

应用模式下不会提前创建集群,所以不能调用 start-cluster.sh 脚本。我们可以使用同样在bin 目录下的 standalone-job.sh 来创建一个 JobManager。

2.3.4高可用

2.4Yarn模式

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

整体来说, YARN 上部署的过程是:客户端把 Flink 应用提交给 Yarn 的 ResourceManager,Yarn 的 ResourceManager 会向 Yarn 的 NodeManager 申请容器。在这些容器上, Flink 会部署JobManager 和 TaskManager 的实例,从而启动集群。 Flink 会根据运行在 JobManger 上的作业所需要的 Slot 数量动态分配 TaskManager 资源。

以Yarn模式部署Flink时,要求Flink是有Hadoop支持的版本,Hadoop环境需要保证版本在2.2以上,并且集群中安装有HDFS服务。

Flink提供了两种在Yarn上运行的模式,分别为Session-Cluster和Per-Job-Cluster模式。

2.4.1环境准备

在Flink1.8.0之前的版本,需要hadoop支持版本的flink,例如:flink-1.7.2-bin-hadoop28-scala_2.12.tgz ;Flink1.8.0之后,需要手动下载jar包上传至flink的lib目录下,例如:flink-shaded-hadoop-2-uber-2.4.1-10.0.jar;Flink1.11.0之后,可以直接通过配置环境变量完成与YARN集群的对接;

2.4.2 会话模式

image-20210519164737175

Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源保持永远不变。所有作业共享Dispacher和ResourceManager。

在yarn中初始化一个Flink集群,开辟指定的资源,以后提交任务都向这里提交。这个Flink集群会常驻在yarn集群中,除非手工停止。

2.4.3单作业模式

image-20210519180600089

一个Job会对应一个集群,每提交一个作业会根据自身的情况,都会单独想yarn申请资源,直到作者执行完成,一个作作业的失败与否并不会影响下一个作业的正常提交和运行。独享Dispacher和ResourceManager,按需接受资源申请。

每次提交都会创建一个新的Flink集群,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。

2.4.4应用模式

2.4.5高可用

YARN 模式的高可用和独立模式(Standalone)的高可用原理不一样。
Standalone 模式中, 同时启动多个 JobManager, 一个为“领导者”(leader),其他为“后备”(standby) , 当 leader 挂了, 其他的才会有一个成为 leader。
而 YARN 的高可用是只启动一个 Jobmanager, 当这个 Jobmanager 挂了之后, YARN 会再次启动一个, 所以其实是利用的 YARN 的重试次数来实现的高可用。

Session Cluster

1)启动Hadoop集群

2)启动yarn-session

./yarn-session.sh -n 2 -s 2 -jm 1024 -nm test -d

其中:

​ -n(--container):TaskManager的数量

​ -s(--slots):每个TaskManager的slot数量,默认一个slot一个core,默认每个TaskManager的slot的个数为1,有时可以多一些TaskManager,做冗余。

​ -jm:JobManager的内存(单位MB)

​ -tm:每个TaskManager的内存(单位MB)

​ -nm:yarn上的appName(现在的yarn上的ui的名字)

​ -d:后台执行

3)执行任务

./flink run -c com.hanxf.wc.StreamWordCount FlinkTutorial-1.0-jar.jar --host localhost --port 7777

4)去yarn查看任务

5)取消yarn-session

yarn application --kill appcalition_34327498324_838473847

Per Job Cluster

1)启动Hadoop集群

2)不启动yarn-session,直接执行job

./flink run -m yarn-cluster -c com.hanxf.wc.StreamWordCount FlinkTutorial-xxx.jar --host localhost -port 7777

Kubernetes部署

容器化部署目前在大公司中是常用的部署方式,在容器中部署有两种常见的方式:一种是通过k8s进行调度,另一种是将yarn部署在容器中,通过yarn进行资源调度。通过k8s进行调度比较复杂,需要了解k8s的相关知识,后面有时间在学习k8s时进行补充。第二种方式就是将任务提交到yarn,只是yarn部署的地方在容器中罢了,所以以这种模式进行部署的时候,可以直接将其当做yarn模式来进行操作。

flink1.14.0已经移除对Mesos的支持。

Per Job Cluster

2.5K8S模式

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

posted @ 2022-10-24 23:16  帅气的小峰  阅读(2063)  评论(0编辑  收藏  举报