Flink 部署模式
实验介绍
学习大数据组件绕不开的一个话题就是搭建集群,学习 Flink 也一样。上一个实验中我们对 Flink 做了一个初步的介绍,并分别运行了 Flink 的批计算和流计算的 WordCount,本节实验我们将学习 Flink 的集群搭建。
知识点
- 介绍 Flink 的三种部署模式
- 搭建 Standalone 伪分布式集群
- 向集群提交 WordCount 任务
下载安装包
首先打开终端 ,执行命令获取安装包:
# 官网下载,可能慢,可以使用国内镜像源
wget https://archive.apache.org/dist/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz
# 使用国内清华镜像源下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz
tar -xvf flink-1.17.2-bin-scala_2.12.tgz
将其解压到该目录下。
部署模式介绍
如果你学习过 Spark 的话,那么你应该会觉得接下来的内容似曾相识。在 Flink 中有三种部署模式,分别是 Standalone、Yarn 模式和 Kubernetes。在本次实验中我们的重点是 Standalone 模式,Yarn 和 Kubernetes 只需要了解即可。
Standalone
这里的 Standalone 和 Spark 中的 Standalone 的含义是一样的,就是 Flink 自己来负责资源调度,不依赖于其它工具。
搭建步骤如下:
-
将解压好的安装包复制到
/opt/softes/
目录下sudo cp -r flink-1.17.2 /opt/softes/
-
进入到
/opt/softes/flink-1.17.2/
目录下,启动集群sudo cd /opt/softes/flink-1.17.2/ sudo bin/start-cluster.sh
至此,我们已经搭建了一个最简单的 Standalone 模式的集群,也就是伪分布式或者说是单节点的集群。双击桌面的 Firefox 浏览器,打开 [standalone模式部署flink服务的IP]:8081
就会看到下面的界面:
受限于我们的云主机环境,在实验课程中只能搭建伪分布式的集群。如果需要搭建多台机器组成的 Standalone 模式集群也并不难,只需要在以上步骤的基础上做简单配置即可。
假设要有三台机器,主机名分别为 bigdata1、bigdata2、bigdata3,接下来只需要:
-
在 bigdata1 的 Flink 安装包中的
conf/flink-conf.yaml
文件中添加以下内容:jobmanager.rpc.address:bigdata1
-
在 bigdata1 中的 Flink 安装包中的
conf/slaves
文件中添加以下内容:bigdata2 bigdata3
-
将 bigdata1 中的 Flink 安装包分别拷贝到 bigdata2 和 bigdata3 的相同目录下,然后在 bigdata1 中执行
bin/start-cluster.sh
启动集群。
注意:以上三个步骤的前提是三台机器上都安装了相同的版本的 jdk 和 scala,并且配置了 ssh 免密登录。
Yarn 模式
和 Spark 类似,Flink 同样支持以 Yarn 模式部署 Flink 任务,但是 Hadoop 的版本必须在 2.2 以上。
Yarn 模式的部署分为两种,分别是 Session-Cluster 和 Pre-Job-Cluster。
-
Session-Cluster
Session-Cluster 的特点是在提交任务之前,需要先去 Yarn 启动一个 Flink 集群,启动成功之后通过 Flink run 命令往 Flink 集群中提交任务。当 Job 执行完之后,集群并不会关闭,等待下个 Job 提交。这样做的好处是 Job 启动的时间变短,适合规模小执行时间短的作业。
-
Pre-Job-Cluster
Pre-Job-Cluster 的特点是一个 Job 对应一个集群,每提交一个 Job,会根据其自身情况单独向 Yarn 申请资源。这样做的好处是各个 Job 使用的资源之间独立,一个作业失败并不会影响到其它作业的正常运行,适合规模大运行时间长的任务。
Kubernetes 模式
随着信息化技术的发展,容器化技术也越来越流行。你可能没有听过 Kubernetes,但是你一定听过 Docker。是的,Kubernetes 和 Docker 类似,也是容器化技术的一种。虽然 Flink 支持基于 Kubernetes 部署,但是在业界好像并没有听到过有哪家企业在使用这种部署模式,所以大家只需要了解即可,不用做过多研究。
提交任务
接下来我们将基于在第一节实验中的批计算代码来学习在 Flink 中的两种任务提交方式。
在 IDEA 中点击 Maven 中的 package
按钮打包,然后将会得到两个 jar 包,一个是没有依赖的,一个是带依赖的。
界面化提交
在打开的 Flink Web 界面中依次点击 Submit New Job
-> Add New
,在弹出的窗口中找到项目路径的 target 目录里刚才打好的 jar 包,选择带依赖的点击上传。
点击上传的 jar 包名称,在弹出的几个输入框中分别输入全类名 com.vlab.wc.BatchWordCount
和并行度 2
,点击 Submit
提交。
命令提交
在 Flink 安装目录下执行以下命令:
cd /usr/local/flink-1.17.2/bin
# 注意替换成你实际的 Jar 包的地址
/usr/local/flink-1.17.2/bin/flink run -m localhost:8081 -p 2 -c com.vlab.wc.BatchWordCount /home/hadoop/hadoopEcoProjects/flinkprojects/FlinkLearning-1.0-SNAPSHOT-jar-with-dependencies.jar /home/hadoop/hadoopEcoProjects/inputs/words.txt
其中 -m
指定提交的主节点地址,-p
指定任务并行度,-c
指定要执行任务入口程序的全类名,最后是 jar 包的路径。
实验总结
本节实验中我们介绍了 Flink 的三种部署模式和 Standalone 模式下的两种任务提交方式。Standalone 模式部署集群是必须要掌握的,由于受限于云主机,所以我们只搭建了伪分布式的集群,如果自己的电脑条件允许,可以尝试搭建由多台节点组成的集群。Yarn 和 Kubernetes 模式只需要了解即可。