Flink Standalone模式HA部署

Standalone Cluster HA

前面我们配置的 Standalone 集群实际上只有一个 JobManager,此时是存在单点故障的,所以官方提供了 Standalone Cluster HA 模式来实现集群高可用。

1. 前置条件

在 Standalone Cluster HA 模式下,集群可以由多个 JobManager,但只有一个处于 active 状态,其余的则处于备用状态,Flink 使用 ZooKeeper 来选举出 Active JobManager,并依赖其来提供一致性协调服务,所以需要预先安装 ZooKeeper 。

另外在高可用模式下,还需要使用分布式文件系统来持久化存储 JobManager 的元数据,最常用的就是 HDFS,所以 Hadoop 也需要预先安装。

使用该模式前,需要确保所有服务器间都已经配置好 SSH 免密登录服务。这里我以三台服务器为例,hadoop001,hadoop002,hadoop003。

2. 搭建步骤

角色分配:

主机名masterworker进程名
hadoop001StandaloneSessionClusterEntrypoint、TaskManagerRunner
hadoop002StandaloneSessionClusterEntrypoint、TaskManagerRunner
hadoop003TaskManagerRunner

Flink 所有版本的安装包可以直接从其官网进行下载,这里我下载的 Flink 的版本为 1.12.4,要求的 JDK 版本为 1.8.x +。 下载后解压到指定目录:

tar -zxvf flink-1.12.4-bin-scala_2.11.tgz -C /usr/apps

修改 conf/masters 文件,将 hadoop001 和 hadoop002 都配置为 master 节点:

hadoop001:8081
hadoop002:8081

修改 conf/workers文件,将hadoop001、hadoop002和hadoop003配置为workers节点:

hadoop001
hadoop002
hadoop003

修改 conf/flink-conf.yaml 文件,增加如下配置:

//配置参数本机名
jobmanager.rpc.address: hadoop001
# 配置使用zookeeper来开启高可用模式
high-availability: zookeeper
# 配置zookeeper的地址,采用zookeeper集群时,可以使用逗号来分隔多个节点地址
high-availability.zookeeper.quorum: hadoop001:2181,hadoop002:2181,hadoop003:2181
# 在zookeeper上存储flink集群元信息的路径
high-availability.zookeeper.path.root: /flink
# 集群id
high-availability.cluster-id: /standalone_cluster_one
# 持久化存储JobManager元数据的地址,zookeeper上存储的只是指向该元数据的指针信息
high-availability.storageDir: hdfs://hadoop001:9000/flink/ha
#如果默认端口8081被占用,可以去更改默认端口为8082,同时masters的web端口也修改为8082
#rest.port: 8082

修改zoo.cfg如下,或将zookeeper/conf目录下的zoo.cfg复制到flink的conf目录下。

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial  synchronization phase can take
initLimit=10

# The number of ticks that can pass between  sending a request and getting an acknowledgement
syncLimit=5

# The directory where the snapshot is stored.
# dataDir=/tmp/zookeeper

# The port at which the clients will connect
clientPort=2181

# ZooKeeper quorum peers
server.0=hadoop001:2888:3888
server.1=hadoop002:2888:3888
server.2=hadoop003:2888:3888

将配置好的 Flink 安装包分发到其他两台服务器上:

scp -r /usr/app/flink-1.12.4 hadoop002:/usr/apps
scp -r /usr/app/flink-1.12.4 hadoop003:/usr/apps

确保 Hadoop 和 ZooKeeper 已经启动后,在 hadoop001 上使用如下命令来启动集群:

bin/start-cluster.sh

此时输出如下:

//启动之后会显示如下日志信息
Starting HA cluster with 2 masters.
Starting standalonesession daemon on host hadoop001.
Starting standalonesession daemon on host hadoop002.
Starting taskexecutor daemon on host hadoop001.
Starting taskexecutor daemon on host hadoop002.
Starting taskexecutor daemon on host hadoop003.

 可以看到集群已经以 HA 的模式启动,此时还需要在各个节点上使用 jps 命令来查看进程是否启动成功,正常情况如下:

//已经有了
$ jps
16596 NameNode
9959 ResourceManager
16888 SecondaryNameNode
17016 QuorumPeerMain
17976 Jps
10073 NodeManager
16698 DataNode
8349 StandaloneSessionClusterEntrypoint
8396 TaskManagerRunner

只有 hadoop001 和 hadoop002 的 JobManager 进程StandaloneSessionClusterEntrypoint,hadoop001、hadoop002 和 hadoop003 上的 TaskManager 进程TaskManagerRunner都已经完全启动,才表示 Standalone Cluster HA 模式搭建成功。

3. 常见异常

如果进程没有启动,可以通过查看 log 目录下的日志来定位错误,常见的一个错误如下:

    2022-03-17 17:18:35,877 INFO  org.apache.flink.runtime.entrypoint.ClusterEntrypoint      
    - Shutting StandaloneSessionClusterEntrypoint down with application status FAILED. Diagnostics
    java.io.IOException: Could not create FileSystem for highly available storage (high-availability.storageDir)
    .......
    Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file 
    system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no 
    Hadoop file system to support this scheme could be loaded.
    .....
    Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Hadoop is not in 
    the classpath/dependencies.
    ......

可以看到是因为在 classpath 目录下找不到 Hadoop 的相关依赖,此时需要检查是否在环境变量中配置了 Hadoop 的安装路径,如果路径已经配置但仍然存在上面的问题,可以从 Flink 官网下载对应版本的 Hadoop 组件包:

下载完成后,将该 JAR 包上传至所有 Flink 安装目录的 lib 目录,重新启动集群即可。

flink-conf.yaml参数说明:

参数说明
jobmanager.rpc.addresscentoshadoop1jobmanager所在节点
jobmanager.rpc.port6123jobManager端口,默认为6123
jobmanager.heap.size2048mjobmanager可用内存
taskmanager.heap.size4096m每个TaskManager可用内存,根据集群情况指定
taskmanager.numberOfTaskSlots3每个taskmanager的并行度(5以内)
parallelism.default2启动应用的默认并行度(该应用所使用总的CPU数)
rest.port8081如果Flink web UI默认端口与spark的端口8081冲突,更改为8082或其他没被占用的端口

访问web界面 http://hadoop001:8081 可以对 flink 集群和任务进行监控管理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据翻身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值