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
然后查看启动的进程
在配置文件conf/slaves中,如果配置了多个机器,那么多个机器上就会有TaskManagerRunner进程。我们可以通过localhost:8081web页面来对flink进行管理。
通过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
通过nc输入数字,然后在TaskManager中发现有输出。
关于上面中提到的各种概念,将在下一章中进行说明。
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](flink-img/image-20210519164737175.png)
Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源保持永远不变。所有作业共享Dispacher和ResourceManager。
在yarn中初始化一个Flink集群,开辟指定的资源,以后提交任务都向这里提交。这个Flink集群会常驻在yarn集群中,除非手工停止。
2.4.3单作业模式
![image-20210519180600089](flink-img/image-20210519180600089.png)
一个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 是类似的,具体配置可以参见官网说明,这里我们就不做过多讲解了。
标签:Flink,部署,flink,yarn,集群,模式,安装 From: https://www.cnblogs.com/hanxuefeng/p/16823384.html