Flink:史上最详细的介绍(一)[简介]
Flink:史上最详细的介绍(二)[架构体系]
Flink:详细讲解FlinkFlink 运行架构(四)[运行架构]
Flink:{一,二,三,四}[整体总结]
Flink 支持多种安装模式。
Flink官方下载:https://flink.apache.org/
百度云盘:链接:https://pan.baidu.com/s/1AFvhe9TjKP3mxWhXcns-CA
提取码:y0tm
master(JobManager)+slave/worker(TaskManager)
node01(master+slave) node02(slave) node03(slave)
解压 Flink 压缩包到指定目录
配置 Flink
配置 Slaves 节点
分发 Flink 到各个节点
启动集群
递交 wordcount 程序测试
查看 Flink WebUI
# 配置 Master 的机器名( IP 地址)
jobmanager.rpc.address:node01
# 配置每个 taskmanager 生成的临时文件夹
taskmanager.tmp.dirs:/export/servers/flink-1.7.2/tmp
node01
node02
node03
exportHADOOP_CONF_DIR=/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
scp-r/etc/profile node02:/etc
scp -r /etc/profile node03:/etc
source/etc/profile
for i in {2..3}; do scp -r flink-1.7.2/ node0$i:$PWD; done
bin/start-cluster.sh
--------------------- node01 ----------------
86583 Jps
85963 StandaloneSessionClusterEntrypoint
86446 TaskManagerRunner
--------------------- node02 ----------------
44099 Jps
43819 TaskManagerRunner
--------------------- node03 ----------------
29461 TaskManagerRunner
29678 Jps
基础配置:
# jobManager 的 IP 地址
jobmanager.rpc.address: localhost
# JobManager 的端⼝号
jobmanager.rpc.port: 6123
# JobManager JVM heap 内存⼤⼩
jobmanager.heap.size: 1024m
# TaskManager JVM heap 内存⼤⼩
taskmanager.heap.size: 1024m
# 每个 TaskManager 提供的任务 slots 数量⼤⼩ taskmanager.numberOfTaskSlots: 1
# 程序默认并⾏计算的个数
parallelism.default: 1
[[email protected]]#hadoopfs-mkdir-p/test/input
[[email protected]]#hadoopfs-put/root/wordcount.txt/test/input
[root@node01 flink-1.7.2]#bin/flink run /export/servers/flink-
1.7.2/examples/batch/WordCount.jar --input
hdfs://node01:8020/test/input/wordcount.txt --output
hdfs://node01:8020/test/output/200701
启动: ./bin/start-cluster.sh
停止: ./bin/stop-cluster.sh
启动/停止 jobmanager
如果集群中的 jobmanager 进程挂了, 执行下面命令启动
bin/jobmanager.sh start
bin/jobmanager.sh stop
启动/停止 taskmanager
添加新的 taskmanager 节点或者重启 taskmanager 节点 bin/taskmanager.sh start
bin/taskmanager.sh stop
client 客户端提交任务给 JobManager
JobManager 负责 Flink 集群计算资源管理, 并分发任务给 TaskManager 执行
TaskManager 定期向 JobManager 汇报状态
从上述架构图中, 可发现 JobManager 存在单点故障,一旦 JobManager 出现意外,整个集群无法工作。
所以,为了确保集群的高可用,需要搭建 Flink 的 HA.( 如果是部署在 YARN 上,部署 YARN 的 HA),我们这里演示如何搭建 Standalone 模式 HA。
master(JobManager)+slave/worker(TaskManager)
node01(master+slave) node02(master+slave) node03(slave)
#开启 HA, 使用文件系统作为快照存储
state.backend: filesystem
#默认为 none, 用于指定 checkpoint 的 data files 和 meta data 存储的目录 state.checkpoints.dir: hdfs://node01:8020/flink-checkpoints
#默认为 none, 用于指定 savepoints 的默认目录
state.savepoints.dir: hdfs://node01:8020/flink-checkpoints
#使用 zookeeper 搭建高可用
high-availability: zookeeper
# 存储 JobManager 的元数据到 HDFS,用来恢复 JobManager 所需的所有元数据 high-availability.storageDir: hdfs://node01:8020/flink/ha/ high-availability.zookeeper.quorum: node01:2181,node02:2181,node03:2181
[root@node01 conf]# for i in {2..3}; do scp -r /export/servers/flink-1.7.2/conf/flink-conf.yaml node0$i:$PWD; done
到节点 2 中修改 flink-conf.yaml 中的配置,将 JobManager 设置为自己节点的名称
jobmanager.rpc.address:node02
在 masters 配置文件中添加多个节点
node01:8081
node02:8081
分发 masters 配置文件到另外两个节点
[root@node01 servers]# for i in {2..3}; do scp -r
/export/servers/flink-1.7.2/conf/masters node0$i:$PWD; done
[root@node01 servers]# /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start
[root@node02 servers]# /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start
[root@node03 servers]# /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start
[root@node01 flink-1.7.2]# bin/start-cluster.sh
Starting HA cluster with 2 masters.
Starting standalonesession daemon on host node01.hadoop.com.
Starting standalonesession daemon on host node02.hadoop.com.
Starting taskexecutor daemon on host node01.hadoop.com.
Starting taskexecutor daemon on host node02.hadoop.com.
Starting taskexecutor daemon on host node03.hadoop.com.
在一个企业中,为了最大化的利用集群资源,
一般都会在一个集群中同时运行多种类型的 Workload.
因此 Flink 也支持在 Yarn 上面运行; flink on yarn 的前提是:hdfs, yarn 均启动
jdk1.8 及以上【 配置 JAVA_HOME 环境变量】
ssh 免密码登录【 集群内节点之间免密登录】
至少 hadoop2.2
hdfs & yarn
master(JobManager)+slave/worker(TaskManager)
node01(master) node02(slave) node03(slave)
vim etc/hadoop/yarn-site.xml
添加:
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀 掉,默认是 true。 在这里面我们需要关闭,因为对于 flink 使用 yarn 模式下,很容易内存超标,这个时候 yarn 会自动杀掉 job。
添加:export HADOOP_CONF_DIR=/export/servers/hadoop/etc/Hadoop
YARN_CONF_DIR 或者 HADOOP_CONF_DIR 必须将环境变量设置为读取 YARN 和HDFS 配置
从图中可以看出:
Yarn 的客户端需要获取 hadoop 的配置信息,连接 Yarn 的 ResourceManager。
所以要有设置有 YARN_CONF_DIR 或者 HADOOP_CONF_DIR 或者
HADOOP_CONF_PATH,只要设置了其 中一个环境变量,就会被读取。如果读取上述
的变量失败了,那么将会选择 hadoop_home 的环境 变量,都区成功将会尝试加
载$HADOOP_HOME/etc/hadoop 的配置文件。
yarn-session 提供两种模式
-n,--container > 分配多少个 yarn 容器 (=taskmanager 的数量)
Optional -D > 动态属性
-d,--detached 独立运行 (以分离模式运行作业)
-id,--applicationId > YARN 集群上的任务 id,附着到一个后台运行的 yarn session 中 -j,--jar > Path to Flink jar file
-jm,--jobManagerMemory > JobManager 的内存 [in MB]
-m,--jobmanager :port> 指定需要连接的 jobmanager(主节点)地址 ,使用这个参数可以指定一个不同于配置文件中的 jobmanager
-n,--container > 分配多少个 yarn 容器 (=taskmanager 的数量) -nm,--name > 在 YARN 上为一个自定义的应用设置一个名字 -q,--query 显示 yarn 中可用的资源 (内存, cpu 核数) -qu,--queue > 指定 YARN 队列
-s,--slots > 每个 TaskManager 使用的 slots 数量
-st,--streaming 在流模式下启动 Flink
-tm,--taskManagerMemory > 每个 TaskManager 的内存 [in MB]
-z,--zookeeperNamespace > 针对 HA 模式在 zookeeper 上创建 NameSpace
注意:
如果不想让 Flink YARN 客户端始终运行,那么也可以启动分离的 YARN 会话。
该参数被称为 -d 或–detached。
bin/yarn-session.sh -n 2 -tm 800 -s 1 -d
上面的命令的意思是,同时向 Yarn 申请 3 个 container(即便只申请了两个,因为 ApplicationMaster 和 Job Manager 有一个额外的容器。一旦将 Flink 部署到 YARN 群集中,它就 会显示 Job Manager 的连接详细信息),其中 2 个 Container 启动 TaskManager (-n 2),每个 TaskManager 拥有 1 个 Task Slot(-s 1),并且向每个 TaskManager 的 Container 申请 800M 的内存,以及一个 ApplicationMaster(Job Manager)。启动成功之后,去 yarn 页面:ip:8088 可以查看当前提交的 flink session
点击 ApplicationMaster 进入任务页面:
上面的页面就是使用:yarn-session.sh 提交后的任务页面;
bin/flink run examples/batch/WordCount.jar
在控制台中可以看到 wordCount.jar 计算出来的任务结果
在 yarn-session.sh 提交后的任务页面中也可以观察到当前提交的任务:
点击查看任务细节:
停止当前任务:
yarn application -kill application_1527077715040_0007
上面的 YARN session 是在 Hadoop YARN 环境下启动一个 Flink cluster 集群,里面的资源 是可以共享给其他的 Flink 作业。我们还可以在 YARN 上启动一个 Flink 作业,这里我们还是使 用./bin/flink,但是不需要事先启动 YARN session.
bin/flink run -m yarn-cluster -yn
yarn application -kill application 的 ID
注意:如果使用的 是 flink on yarn 方式,想切换回 standalone 模式的话,
需要删除文件: 【/tmp/.yarn-properties-root】
因为默认查找当前 yarn 集群中已有的 yarn-session 信息中的 jobmanager