集群角色
Flink提交作业和执行任务,需要几个关键组件:
- 客户端(Client):代码由客户端获取并做转换,之后提交给Manager
- JobManner就是Flink集群里的“老大”,对作业进行中央调度管理;而它获取到要执行的作业后,会进一步处理转换, 然后分发任务给众多的TaskManager。
- TaskManager就是“真正干活”的人,数据的处理操作是它们来做。
Flink是一个非常灵活的处理框架,它支持多种不同的部署场景,还可以和不同的资源管理平台方便的集成。
本地模式、Standalone模式和FlinkonYARN模式是Flink的三种常见部署模式。
Flink的local模式部署安装
在本地模式下,Flink以单机模式运行,无需启动分布式资源管理器。这种模式适用于本地开发和测试,用于验证Flink代码的正确性和性能。(需要安装JDK)
第一步:上传安装包并解压
将Flink 1.17安装包上传至服务器,然后解压。
[root@VM-12-13-centos ~] tar -zxvf flink-1.17.0-bin-scala_2.12.tgz -C /opt/mudule/
第二步:直接使用脚本启动
Flink在local模式下,无需任何配置,直接解压启动即可。
[root@VM-12-13-centos /] cd opt/mudule/flink-1.17.0/
[root@VM-12-13-centos flink-1.17.0] bin/start-cluster.sh
启动后,通过 JPS 可以看到两个线程。
第三步:webUI界面访问
启动两个进程成功之后,访问8081端口号即可访问到flink的web管理界面,如果是云服务器需要开放对应端口,以及必须要在 /conf/flink-conf.yaml 中的 rest.bind-address 配置 0.0.0.0 ,不然无法访问WebUI。
http://服务器ip:8081
向集群提交作业
以之前读取Socket无界流发送的单词统计个数为案例,展示如何将任务以WebUI和命令行的方式提交到Flink。
第一步:程序打包
在项目的pom.xml中添加打包插件配置,如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>com.google.code.findbugs:jsr305</exclude>
<exclude>org.slf4j:*</exclude>
<exclude>log4j:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<!-- Do not copy the signatures in the META-INF folder.
Otherwise, this might cause SecurityExceptions when using the JAR. -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers combine.children="append">
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在IDEA的Maven工具中依次执行clean、package命令,然后在target目录下可以看到打包好的JAR包。
启动Socket隧道
[root@VM-12-13-centos flink-1.17.0] nc -lk 8877
在WebUI上提交作业
在Flink的WEB UI页面,在右侧导航栏点击“Submit New Job”,然后点击按钮“+ Add New”,选择要上传刚刚打好的JAR包。
点击该任务,会出现任务配置页面,进行相应配置。
配置完成后,点击“Submit”将任务提交到集群运行 。
测试
在Socket端口中键入一些单词(一定不能断开连接,不然任务会立马失败退出)
[root@VM-12-13-centos flink-1.17.0]# nc -lk 8877
hello flink
hello eason
hello flinl
返回Flink WebUI中,点击左侧菜单中的 TaskManager ,然后点击服务器节点,在Stuout可以看到输出的结果。
后续的结果需要点击刷新才能显示出最新的结果。
如果想结束任务,可以在任务中点击“Cancel Job”以结束任务。
在命令行提交作业
上传Flink程序Jar包
将flink程序运行jar包上传到/opt/module/flink-1.17.0中
命令提交作业
[root@VM-12-13-centos flink-1.17.0]# bin/flink run -m localhost:8081 -c com.xxx.wc.SocketStreamWordCount ./FlinkTutorial-1.0-SNAPSHOT.jar
Job has been submitted with JobID 0a817089223c05502e9b40fe615f67f7
其中:
- -m 指定要将任务提交到的节点
- -C 指定程序入口类
此时,刷新Web可以看到正在运行的任务,测试步骤与之前一样。