flink应用基础一:部署

55 阅读3分钟

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集群。

image.png

如果要停止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上查看:

image.png

image.png

1.2.2 在dashboard页面上提交

flink也支持在dashboard web页面上提交作业 image.png

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