1 standalone local模式部署
1.1 安装启动
单节点local模式运行flink,非常简单、方便快捷,只要下载安装包,直接启动即可
% java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (Zulu 8.54.0.21-CA-macos-aarch64) (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (Zulu 8.54.0.21-CA-macos-aarch64) (build 25.292-b10, mixed mode)
% tar -xzf flink-1.17.1-bin-scala_2.12.tgz
% cd flink-1.17.1
% ls
LICENSE NOTICE README.txt bin conf examples lib licenses log opt plugins
% ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host szbddeMacBook-Pro-3.local.
Starting taskexecutor daemon on host szbddeMacBook-Pro-3.local.
启动后,发现flink共启动了两个进程:TaskManagerRunner和StandaloneSessionClusterEntrypoint
% jps
53394 TaskManagerRunner
53127 StandaloneSessionClusterEntrypoint
同时在log
目录下,出现了一些日志文件。这些日志分为两种,.log
日志记录了Flink平台的一些系统内部运行信息,例如任务启动、停止、失败等信息,.out
日志记录了flink平台上运行的用户任务打印的日志内容。日志文件名的格式为:flink-${用户名}-${flink组件名}-${组件编号}-${机器主机名}
% ls log
flink-user-standalonesession-0-szbddeMacBook-Pro-3.local.log flink-user-standalonesession-0-szbddeMacBook-Pro-3.local.log.1 flink-user-standalonesession-0-szbddeMacBook-Pro-3.local.out flink-user-taskexecutor-0-szbddeMacBook-Pro-3.local.log
flink-user-taskexecutor-0-szbddeMacBook-Pro-3.local.out
我们可以通过flink的dashboard(默认地址:http://localhost:8081
)查看和管理flink集群。
如果要停止flink集群,执行以下命令即可:
% ./bin/stop-cluster.sh
No taskexecutor daemon (pid: 21096) is running anymore on szbddeMacBook-Pro-3.local.
No standalonesession daemon (pid: 20829) is running anymore on szbddeMacBook-Pro-3.local.
1.2 向flink提交工作
1.2.1 通过flink命令提交
flink安装包的examples目录下已经存放了一些现成的例子,我们运行一下经典的WordCount
例子
% ./bin/flink run examples/streaming/WordCount.jar
Executing example with default input data.
Use --input to specify file input.
Printing result to stdout. Use --output to specify output path.
Job has been submitted with JobID 7714799f764cfdae0c26c1074a68aaa2
Program execution finished
Job with JobID 7714799f764cfdae0c26c1074a68aaa2 has finished.
Job Runtime: 543 ms
然后查看一下日志文件内容:
% tail log/flink-*-taskexecutor-*.out
(nymph,1)
(in,3)
(thy,1)
(orisons,1)
(be,4)
(all,2)
(my,1)
(sins,1)
(remember,1)
(d,4)
日志内容也可以在dashboard上查看:
1.2.2 在dashboard页面上提交
flink也支持在dashboard web页面上提交作业
2 standalone集群模式部署
2.1 配置ssh免密码登录
flink通过ssh远程登录集群其他节点启动相应的进程。要实现免密登录,将节点的ssh key copy到其他节点的authorized_keys
文件中即可
# 生成ssh key
$ ssh-keygen -t rsa
# copy到远程机器
$ ssh-copy-id -i ~/.ssh/id_rsa.pub work@10.131.20.16
$ ssh-copy-id -i ~/.ssh/id_rsa.pub work@10.131.20.18
$ ssh-copy-id -i ~/.ssh/id_rsa.pub work@10.131.20.19
2.2 flink集群配置
在./conf/masters
文件中添加jobmanager机器
$ cat << EOF > conf/masters
10.131.20.16:8081
EOF
在./conf/workers
文件中添加taskmanager机器列表
$ cat << EOF > conf/workers
10.131.20.16
10.131.20.18
10.131.20.19
EOF
编辑flink配置文件./conf/flink-conf.yaml
,核心基础配置如下:
#==============================================================================
# Common
#==============================================================================
jobmanager.rpc.address: 10.131.20.16
jobmanager.rpc.port: 6123
jobmanager.bind-host: 0.0.0.0
jobmanager.memory.process.size: 1600m
taskmanager.bind-host: 0.0.0.0
# taskmanager.host: localhost
taskmanager.memory.process.size: 1728m
# 每个taskmanager的槽位数
taskmanager.numberOfTaskSlots: 2
# 算子任务默认并行度
parallelism.default: 4
#==============================================================================
# Rest & web frontend
#==============================================================================
# dashboard默认端口号
#rest.port: 8081
rest.address: 0.0.0.0
rest.bind-address: 0.0.0.0
2.3 启动集群
要启动standalone集群,在任意节点上执行一下命令即可(前提是集群其他节点都允许该节点免密登录)
$ ./bin/start-cluster.sh
2.4 高可用集群部署
上面启动的集群只有一个节点启动jobmanager组件,存在单点故障。flink基于zookeeper实现了高可用集群。
要实现集群高可用,只需要在./conf/masters
配置文件中添加多个运行jobmanager的节点:
$ cat << EOF > conf/masters
10.131.20.16:8081
10.131.20.18:8081
EOF
然后在./conf/flink-conf.yaml
配置文件中添加zookeeper的相关配置:
high-availability.type: zookeeper
# 集群元数据存储位置,这里使用hdfs文件系统
high-availability.storageDir: hdfs://10.131.20.16:9000/flink/ha/
high-availability.zookeeper.quorum: 10.131.20.16:2181,10.131.20.18:2181,10.131.20.18:2181
# flink集群信息在zookeeper中的根目录
high-availability.zookeeper.path.root: /flink
# 当前集群在zookeeper中的根目录
high-availability.cluster-id: /mycluster
注意:在HA情况下,flink配置项jobmanager.rpc.address
不再生效,将被忽略。因为jobmanager节点不是固定的,而是通过zookeeper选主选出来的。
然后正常启动集群即可:
$ ./bin/start-cluster.sh
3 基于yarn的flink集群部署
基于yarn部署flink是生产中常见的方式。yarn集群的部署请参考: 介绍几种hadoop部署方式:单节点、集群、高可用集群。基于yarn集群的flink有三种工作模式:application、per-job、session。其中application和per-job模式都不需要事先启动一个集群,因为这两种模式都是在flink提交作业(Job)后由yarn启动一个专用的flink集群来执行作业的任务。但是这样一来,flink客户端需要知道yarn环境的信息,这样flink客户端才能与yarn集群进行通信,并提交作业,该目的可以通过设置相应的环境变量来实现:
export HADOOP_CLASSPATH=`hadoop classpath`
export HADOOP_CONF_DIR=/home/work/hadoop/etc/hadoop