高可用Flink on YARN集群快速配置

本文介绍如何在现有YARN和ZooKeeper集群上配置Flink on YARN进行实时计算任务,包括资源参数设置、高可用配置及StateBackend选择等关键步骤。

我们长久以来一直使用Spark作为离线和近实时计算框架,几乎承担了主要业务中所有的计算任务。最近Flink逐渐兴起,我们通过查阅资料和参加Meetup,了解到Flink在实时计算方面确实比Spark有优势。我们正准备涉足实时业务,实时数仓、实时推荐这些东西总是要有的,快速上手Flink势在必行。


Flink的官方文档比较详尽,并且设计理念与Spark多有相通,理解成本较低。Flink有多种集群部署方式(Local/Standalone/YARN/K8s/Mesos等等),考虑到已经有现成的YARN和ZooKeeper集群,所以直接配置Flink on YARN。

下图示出Flink on YARN的基本原理,可见与Spark on YARN非常相似。

首先设定Hadoop路径的环境变量,Flink需要用它来获取HDFS、YARN的配置信息。

~ vim /etc/profile
export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop

然后编辑flink-conf.yaml,其中包含了Flink的基础配置。

  • 资源参数
# JobManager堆内存
jobmanager.heap.mb: 1024
# TaskManager堆内存
taskmanager.heap.mb: 2048
# 每个TaskManager上task slot数目
taskmanager.numberOfTaskSlots: 4
# 默认并行度
parallelism.default: 12

以上四项只是给出默认配置,实际执行作业时都可以用对应的命令行参数(-jm、-tm、-s、-p)修改。

  • 高可用配置
# 开启基于ZK的高可用
high-availability: zookeeper
# ZK集群(即所谓Quorum)地址
high-availability.zookeeper.quorum: ha1:2181,ha2:2181,ha3:2181
# Flink在ZK存储中的根节点
high-availability.zookeeper.path.root: /flink
# JobManager元数据的持久化位置,必须是可靠存储
high-availability.storageDir: hdfs://mycluster/flink/ha/
# 程序启动时的最大尝试次数
# 应当与YARN ApplicationMaster的最大尝试次数(yarn.resourcemanager.am.max-attempts)相同
yarn.application-attempts: 4

注意YARN ApplicationMaster的最大尝试次数(yarn.resourcemanager.am.max-attempts)默认值仅为2,使得作业容错率很低,因此预先把它修改为4,或者更大些。

  • StateBackend默认配置
# StateBackend类型
# 可选jobmanager(JM本身)/filesystem(外部文件系统)/rocksdb(自带的RocksDB数据库)
state.backend: filesystem
# 检查点目录
state.checkpoints.dir: hdfs://mycluster/flink-checkpoints
# 保存点目录(比检查点更重量级,一般手动操作,用于重启恢复)
state.savepoints.dir: hdfs://mycluster/flink-savepoints

选择filesystem或者rocksdb的话,可靠性比较高。对于轻量级的、逻辑不复杂的任务,可以选择jobmanager。程序中也能通过StreamExecutionEnvironment.setStateBackend()方法来指定。

  • 额外的JVM参数
env.java.opts: -server -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError

这个类似于spark-submit中的extraJavaOptions。

Flink on YARN有两种执行模式。

  • Session模式:通过yarn-session.sh创建一个持续运行的Flink Session,其中已经分配好了JobManager、TaskManager及所需资源,提交作业时,相当于提交给Session。
  • Single job模式:通过flink run脚本每次提交单个作业,设定JobManager为yarn-cluster,由YARN单独分配资源,类似于spark-submit的yarn-cluster部署模式。生产环境一般用这种模式,下面是示例脚本。
/opt/flink-1.5.1/bin/flink run \
# 分离模式运行 (-d)
--detached \
# 指定JobManager (-m)
--jobmanager yarn-cluster \
# YARN Application的名称 (-ynm)
--yarnname "test-calendar-rt" \
# 分配的YARN Container数量 (-yn)
--yarncontainer 3 \
# JobManager内存 (-yjm)
--yarnjobManagerMemory 1024 \
# TaskManager内存 (-ytm)
--yarntaskManagerMemory 2048 \
# 每个TaskManager上task slot数目 (-ys)
--yarnslots 3 \
# 并行度 (-p)
--parallelism 9 \
# 用户程序的入口类 (-c)
--class com.xyz.bigdata.rt.flink.CalendarRecordETLTest \
/var/projects/rt/flink-test-0.1-jar-with-dependencies.jar
<think> 我们根据用户需求查找Flink on YARN的部署方法。用户明确要求部署教程。 根据引用内容,Flink on YARN有两种模式:Session模式和Single job模式(也称Per-job模式)。我们需要分别说明这两种模式的部署步骤。 步骤概述: 1. 前置条件:确保已安装Hadoop(YARN)和Flink,并配置好环境变量(如HADOOP_HOME, HADOOP_CONF_DIR等)。 2. 两种部署模式: a. Session模式:启动一个长期运行的Flink集群(包含JobManager和TaskManagers),然后提交多个作业到这个集群。 b. Single job模式:每个作业单独启动一个Flink集群,作业完成后集群释放。 详细步骤: 一、Session模式部署步骤: 1. 启动Flink Session集群: 使用`yarn-session.sh`脚本启动。 例如:`./bin/yarn-session.sh -n 4 -jm 1024 -tm 4096 -s 8 -d` 参数说明: -n:TaskManager数量(容器数量) -jm:JobManager内存(MB) -tm:每个TaskManager内存(MB) -s:每个TaskManager的slot数量 -d:以分离模式运行(后台运行) 启动后,YARN会生成一个Application ID,并且会提供一个Flink Web UI的链接。 2. 提交作业到Session集群: 使用`flink run`提交作业,指定YARN集群的Application ID(通过`-yid`参数)。 例如:`./bin/flink run -yid <application_id> examples/batch/WordCount.jar` 二、Single job模式部署步骤(Per-job模式): 1. 直接提交作业,同时启动集群: 使用`flink run`命令,并指定`-m yarn-cluster`(或`-m yarn`,Flink 1.11之后推荐使用`-t yarn-per-job`或`-t yarn-application`,但注意版本差异)。 例如:`./bin/flink run -m yarn-cluster -yn 2 -yjm 1024 -ytm 4096 -ys 4 examples/batch/WordCount.jar` 参数说明(注意:这些参数是Flink on YARN特有的): -yn:TaskManager数量(容器数量) -yjm:JobManager内存(MB) -ytm:每个TaskManager内存(MB) -ys:每个TaskManager的slot数量 注意:在Flink 1.11版本之后,Flink on YARN的部署模式有所调整,引入了新的执行模式(使用`-t`指定): - yarn-per-job:每个作业一个集群(类似于之前的yarn-cluster,但内部实现不同) - yarn-session:连接已有的Session(等同于之前的yarn-session- yarn-application:以Application模式运行(作业的main方法在集群中运行,客户端只负责提交) 但根据引用[2]中的命令,使用的是`-m yarn-cluster`,这是旧版本的写法。新版本推荐使用`-t`来指定模式。 因此,对于不同版本,命令有所差异: - Flink 1.10及之前:使用`-m yarn-cluster`来提交Per-job模式的作业。 - Flink 1.11及之后:推荐使用`-t yarn-per-job`(Per-job模式)或`-t yarn-application`(Application模式)。 示例(Flink 1.11+): 提交Per-job作业:`./bin/flink run -t yarn-per-job -Djobmanager.memory.process.size=1024m -Dtaskmanager.memory.process.size=4096m -Dtaskmanager.numberOfTaskSlots=4 examples/batch/WordCount.jar` 注意:新版本中使用了`-D`来设置配置参数,而不是之前的`-yjm`等参数。但为了兼容,旧参数可能仍然可用。 三、配置文件: 在部署之前,需要确保Flink配置文件中(`conf/flink-conf.yaml`)包含必要的YARN配置,并且正确设置Hadoop配置的路径(通过环境变量`HADOOP_CONF_DIR`或`YARN_CONF_DIR`)。 例如,在`flink-conf.yaml`中设置: high-availability: zookeeper high-availability.storageDir: hdfs:///flink/ha high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181 引用[4]中给出了一些配置示例,如堆内存设置等。 四、高可用配置(可选): 如果需要高可用,还需要配置ZooKeeper和检查点存储。 总结步骤: 1. 确保环境正确(Hadoop、Flink)。 2. 根据需要选择模式: - 长期运行多个作业:启动Session集群,然后提交作业。 - 每次运行一个作业:使用Per-job模式(或Application模式)直接提交。 3. 根据Flink版本选择正确的提交命令和参数。 4. 监控作业:通过YARN ResourceManager的Web UI或Flink Web UI(在YARN Application页面中可以找到链接)监控作业状态。 注意:用户提供的引用[3]中提到了两种模式的示意图,但这里无法展示图片,可以提醒用户查看相关图片以帮助理解。 根据引用内容,我们给出一个具体的部署流程示例(以Session模式和Per-job模式为例): 1. Session模式: 步骤1:启动Session ./bin/yarn-session.sh -d -nm flink-session -jm 1024 -tm 4096 -s 4 (-nm 设置YARN应用名称,-d表示后台运行) 步骤2:提交作业 ./bin/flink run -m yarn-cluster -yid <application_id> path/to/jar 2. Per-job模式(旧版本命令): ./bin/flink run -m yarn-cluster -yjm 1024 -ytm 4096 -yn 2 -ys 4 path/to/jar 3. Per-job模式(新版本命令,Flink1.11+): ./bin/flink run -t yarn-per-job -Djobmanager.memory.process.size=1024m -Dtaskmanager.memory.process.size=4096m -Dtaskmanager.numberOfTaskSlots=4 path/to/jar 在部署过程中,注意查看日志以排除错误。 注意事项: - 内存设置:Flink 1.10之后,内存配置发生了变化,建议使用新的内存配置方式(如`-Djobmanager.memory.process.size`)以避免混淆。 - 资源分配:根据作业需求调整TaskManager的数量和每个TaskManager的slot数。 以上即为Flink on YARN集群的部署教程。 </think> ### Flink on YARN 集群部署教程 FlinkYARN 集群上的部署分为两种模式,以下是详细步骤: --- #### **一、部署前提** 1. **环境要求** - Hadoop 集群YARN)正常运行 - Flink 安装包(版本与 Hadoop 兼容) - 环境变量配置: ```bash export HADOOP_HOME=/path/to/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop ``` --- #### **二、部署模式** ##### **1. Session 模式(长期运行集群)** **适用场景**:频繁提交多个短期作业 **部署步骤**: 1. 启动 Flink Session: ```bash ./bin/yarn-session.sh \ -jm 1024 \ # JobManager 内存 (MB) -tm 4096 \ # 每个 TaskManager 内存 (MB) -s 4 \ # 每个 TaskManager 的 Slot 数 -nm flink-session # YARN 应用名称 ``` > 启动后会输出 YARN Application ID 和 Web UI 链接[^3]。 2. 提交作业到 Session: ```bash ./bin/flink run \ -m yarn-cluster \ -yid <YARN_Application_ID> \ # 替换为实际 ID WordCount.jar ``` --- ##### **2. Per-job 模式(单作业独立集群)** **适用场景**:每个作业独占资源,生产推荐[^3] **部署步骤**: ```bash ./bin/flink run \ -m yarn-cluster \ # 指定 YARN 集群 -yjm 1024 \ # JobManager 内存 (MB) -ytm 4096 \ # TaskManager 内存 (MB) -ys 4 \ # 每个 TaskManager 的 Slot 数 -ynm flink-wordcount \# 作业名称 WordCount.jar \ --output hdfs:///flink/test/out.txt ``` --- #### **三、关键配置** 在 `flink-conf.yaml` 中配置: ```yaml # 堆内存设置 jobmanager.memory.process.size: 1024m # JobManager 内存 taskmanager.memory.process.size: 4096m # TaskManager 内存 # 高可用配置(可选) high-availability: zookeeper high-availability.storageDir: hdfs:///flink/ha high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181 ``` > 完整参数见 [Flink 官方文档](https://nightlies.apache.org/flink/flink-docs-stable/)[^4]。 --- #### **四、验证与监控** 1. **查看 YARN 应用**: ```bash yarn application -list ``` 2. **访问 Web UI**: - YARN ResourceManager → 点击 Application ID → 跳转 Flink Dashboard - 默认端口:8081(JobManager Web UI) 3. **日志定位问题**: - YARN 容器日志:`yarn logs -applicationId <app_id>` - Flink 日志:`$FLINK_HOME/log/flink-*.log` --- #### **五、故障处理** - **Session 启动失败**:检查 `HADOOP_CLASSPATH` 是否包含 Hadoop 依赖包 - **作业提交错误**:确保 Jar 包路径正确,网络策略允许访问 HDFS/YARN - **资源不足**:调整 `-yjm`/`-ytm` 参数或 YARN 队列资源[^3] > 详细调试指南参考 Flink 社区文档[^1][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值