Flink按部署模式(也就是application运行模式)分为Flink Application Cluster(in Application Mode)、Flink Job Cluster(in a Per-Job Mode)、Flink Session Cluster(in Session Mode)三种模式。而按资源的提供者(Resource Providers)可以分为Standalone、Native Kubernetes、Yarn。
这里我们搭建的Standalone就是Flink Session Cluster的模式。在Standalone Cluster下,Per-Job Mode模式是不支持的,Application Mode模式也必须用standalone-job.sh来提交,用 ./flink run-application也是不支持的,可以用 ./flink run来提交。
部署Standalone Cluster之前的环境准备:
jdk1.8及以上
flink安装包(注意scala的版本)
安装部署步骤
1. 将安装包解压,拷贝到具体的安装位置(比如 /opt/install/flink-1.12.7/),修改配置,这里只涉及关键配置,其他配置可自行官网查看:
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/config/
假设机器有hadoop1、hadoop2、hadoop3、hadoop4
2. 修改conf/masters和conf/workers文件
conf/masters是jobmanager的机器列表,格式:hostname:port
这里配置为
hadoop1:8081
conf/workers是taskmanager的机器列表,格式:hostname
这里配置为
hadoop2
hadoop3
hadoop4
3. 下面配置conf/flink-conf.yaml文件
jobmanager.rpc.address 是jobmanager rpc通信绑定的地址,这里配置为jobmanager的主机名,即hadoop1
jobmanager.rpc.port 是jobmanager的rpc端口,默认是6123
jobmanager.memory.process.size 是 jobmanager jvm进程的堆内存大小,默认是1600m
taskmanager.memory.process.size 是taskmanager jvm进程的堆内存大小,默认是1728m
taskmanager.numberOfTaskSlots 表示每个taskmanager所能提供的slots数量,也就是flink节点的计算能力,默认值1
以上关于资源的设置要根据集群大小以及机器配置来按需设置。
standalone模式下jobmanager和taskmanager的pid存放位置,默认是在/tmp下,这会导致过一段时间后被linux系统清理,而执行stop-cluster.sh时无法找到pid文件而无法停止,所以可以在flink-conf.yaml里配置 env.pid.dir 修改为其他目录,比如 $FLINK_HOME/pids。
io.tmp.dirs:设置为其他路径,Flink 存放本地数据的目录,默认为系统临时目录(java.io.tmpdir 属性)。 如果配置了目录列表,Flink 将在目录之间轮换写文件。
默认情况下,放在这些目录中的数据包括 RocksDB 创建的文件、溢出的中间结果(批处理算法)和缓存的 jar 文件。此数据不依赖于持久性/恢复,但如果此数据被删除,通常会导致重量级恢复操作。
parallelism.default 是默认任务的并行度,任务没指定时即用该默认值
经过以上基本配置,然后将配置好的安装包拷贝到其他节点,这里是hadoop2-4,然后就可以启动Standalone集群。
4. 启动集群:
./bin/start-cluster.sh
(此处注意不要用 sh bin/start-cluster.sh 启动会报错,原因请看sh和./ 或bash的区别)
start-cluster.sh里面调用的就是jobmanager.sh和taskmanager.sh
另外jobmanager机器即hadoop1要和hadoop2-4打通ssh免密登录,不然无法ssh到hadoop2-4上taskmanager就无法正常启动。没打通ssh免密,则需要手动启动taskmanager。
单独启动或关闭 taskmanager,启动后对应的进程名是TaskManagerRunner
./bin/taskmanager.sh start/stop
单独启动或关闭 jobmanager,启动后对应的进程名是StandaloneSessionClusterEntrypoint
./bin/jobmanager.sh start/stop
启动后可以访问浏览器界面查看web ui,这里是:http://hadoop1:8081
5. 停止集群:
./bin/stop-cluster.sh
提交任务
以Session Mode模式提交
./bin/flink run xxx
以Application Mode模式提交(Flink Application Cluster和Application的生命周期一致,所以该方式提交和上面的Session Cluster都没关系)
./bin/standalone-job.sh start --job-classname xxx
以Per-Job Mode模式,该模式在Standalone模式下不支持
配置Standalone Cluster的HA
配置ha,需要zookeeper、hdfs(分布式或共享的文件系统)的的支持
1. 修改flink-conf.yaml文件,
high-availability: zookeeper
high-availability.zookeeper.quorum: hadoop1:2181,hadoop2:2181,hadoop3:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_one # important: customize per cluster
high-availability.storageDir: hdfs://ns/flink/recovery
2. 修改masters文件,即写多个,这里假设是hadoop1和hadoop0
hadoop0:8081
hadoop1:8081
3. 启动集群
./bin/start-cluster.sh