Flink on YARN 部署

引言

在大数据计算领域,Apache Flink凭借其高性能、流批统一的特性,成为实时数据处理的首选框架。而YARN作为Hadoop生态的资源调度平台,能够为Flink提供强大的资源管理能力。将Flink部署在YARN上,既能充分利用集群资源,又能实现作业的灵活调度。本文将深入讲解Flink on YARN的部署要点,结合实际操作和常见问题解决,帮助开发者快速掌握这一关键技术。

一、前置条件:HADOOP_CLASSPATH配置

Flink集成YARN时,首先需要配置HADOOP_CLASSPATH环境变量,该变量用于指定Hadoop相关类库的路径。若未正确配置,Flink将无法与YARN进行有效通信,导致部署失败。

1.1 检查环境变量

通过以下命令检查HADOOP_CLASSPATH是否已设置:

bash 复制代码
echo $HADOOP_CLASSPATH

若输出为空,则表示尚未配置该环境变量。

1.2 配置环境变量

编辑用户主目录下的.bash_profile文件:

bash 复制代码
vi ~/.bash_profile

在文件中添加以下内容,动态获取Hadoop类路径:

bash 复制代码
export HADOOP_CLASSPATH=`hadoop classpath`

保存文件后,执行以下命令使配置生效:

bash 复制代码
source ~/.bash_profile

1.3 未配置的异常情况

若未配置HADOOP_CLASSPATH,启动Flink on YARN时会抛出类似以下异常:

复制代码
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.yarn.api.records.ApplicationId not found

这是因为Flink无法找到YARN相关的类库,导致无法与YARN集群建立连接。

Flink on YARN支持三种部署模式:Session Mode、Application Mode和Per-Job Cluster Mode,每种模式适用于不同的场景。

2.1 Session Mode(会话模式)

Session Mode是最常用的部署模式,它先在YARN上启动一个长期运行的Flink集群,然后多个作业可以共享这个集群资源。这种模式的优点是资源利用率高,适合运行多个小作业。

启动YARN会话:
bash 复制代码
./bin/yarn-session.sh --detached

参数说明:

  • --detached:以分离模式运行,即在后台启动YARN会话。
提交作业到会话:
bash 复制代码
./bin/flink run -d ./examples/streaming/TopSpeedWindowing.jar
停止YARN会话:
bash 复制代码
echo "stop" | ./bin/yarn-session.sh -id application_XXXXX_XXX

2.2 Application Mode(应用模式)

Application Mode是Flink 1.10引入的新模式,每个Flink应用都有自己独立的JobManager,适用于需要隔离资源的场景。

提交应用:
bash 复制代码
./bin/flink run-application -d -t yarn-application ./examples/streaming/TopSpeedWindowing.jar
查看应用列表:
bash 复制代码
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
取消应用:
bash 复制代码
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

2.3 Per-Job Cluster Mode(单作业集群模式)

Per-Job Cluster Mode为每个作业创建一个独立的Flink集群,作业完成后集群自动销毁。这种模式提供了更好的资源隔离,但资源启动开销较大。

提交作业:
bash 复制代码
./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar
查看作业:
bash 复制代码
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
取消作业:
bash 复制代码
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

2.4 模式对比与选择

模式 资源利用率 启动开销 隔离性 适用场景
Session Mode 多个小作业共享资源
Application Mode 独立应用,需要资源隔离
Per-Job Mode 资源密集型大作业

Flink on YARN提供了丰富的参数选项,用于控制集群资源分配和作业调度。以下是一些常用参数及其说明:

3.1 资源分配参数

bash 复制代码
-yjm,--jobManagerMemory <arg>    # 设置JobManager的内存,单位是MB
-ytm,--taskManagerMemory <arg>   # 设置每个TaskManager的内存,单位是MB
-ys,--slots <arg>                # 每个TaskManager使用的Slot数量

3.2 集群标识参数

bash 复制代码
-ynm,--name <arg>                # 给当前Flink application在YARN上指定名称
-yqu,--queue <arg>               # 指定YARN资源队列

3.3 高级参数

bash 复制代码
-d,--detached                    # 设置在后台运行
-yq,--query                      # 显示YARN中可用的资源(内存、CPU核数)
-yz,--zookeeperNamespace <arg>   # 针对HA模式在Zookeeper上创建NameSpace
-yid,--applicationID <yarnAppId> # 指定YARN集群上的任务ID,附着到已运行的YARN Session中

3.4 参数使用示例

启动一个具有特定资源配置的YARN会话:

bash 复制代码
./bin/yarn-session.sh -yjm 1024 -ytm 4096 -ys 4 -ynm "my-flink-job" -yqu production

四、端口配置与问题解决

4.1 端口占用问题

Flink on YARN部署时,经常会遇到端口被占用的问题,导致作业无法正常启动。常见的端口冲突包括REST API端口和内部通信端口。

4.2 端口配置参数

通过修改conf/flink-conf.yaml文件中的以下参数,可以解决端口冲突问题:

yaml 复制代码
rest.port: 7052                   # REST API端口
rest.bind-port: 8080-8090         # REST API绑定端口范围

4.3 配置说明

  • rest.port:指定Flink Web UI和REST API的固定端口。
  • rest.bind-port:指定Flink尝试绑定的端口范围,当固定端口被占用时,会自动从该范围中选择可用端口。

4.4 配置示例

修改flink-conf.yaml文件,配置动态端口范围:

yaml 复制代码
rest.port: 8081
rest.bind-port: 8080-8100

五、部署实战与最佳实践

5.1 生产环境部署建议

  1. 资源规划:根据作业负载和集群资源,合理分配JobManager和TaskManager的内存和CPU资源。
  2. 使用资源队列 :通过-yqu参数将Flink作业提交到指定的YARN队列,避免资源竞争。
  3. 启用HA模式:对于关键业务作业,启用Flink的高可用模式,确保集群稳定性。
  4. 监控与调优:结合Prometheus和Grafana等监控工具,实时监控Flink集群性能,并根据监控数据进行调优。

5.2 故障排查步骤

  1. 查看YARN日志:通过YARN Web UI查看应用日志,定位启动失败原因。
  2. 检查Flink配置 :确认flink-conf.yamlyarn-site.xml配置正确。
  3. 检查网络连接:确保Flink节点之间网络畅通,无防火墙限制。
  4. 查看端口占用 :使用netstat命令检查端口占用情况,调整冲突端口。

通过以上步骤,开发者可以高效地在YARN上部署和管理Flink作业,充分发挥两者的协同优势。掌握不同部署模式的特点和适用场景,合理配置资源参数,能够有效提升作业性能和集群稳定性。

相关推荐
AEMC马广川7 分钟前
能源托管项目中“企业认证+人才证书”双轨评分策略分析
大数据·运维·人工智能·能源
一个很帅的帅哥11 分钟前
git命令大全
大数据·git·elasticsearch
geneculture1 小时前
融智学体系图谱(精确对应版)
大数据·人工智能·学习·融智学的重要应用·信智序位
有味道的男人1 小时前
国内电商 API 深度赋能:从选品、库存到履约,重构电商运营效率新范式
大数据·重构
程砚成1 小时前
美容行业的未来:当科技照进美与健康
大数据·人工智能
TG:@yunlaoda360 云老大1 小时前
腾讯云国际站代理商TEFP有什么优势呢?
大数据·云计算·腾讯云
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2025-12-17
大数据·人工智能·经验分享·搜索引擎·产品运营
小北方城市网1 小时前
鸿蒙6.0:AI与智能体框架(HMAF),重塑操作系统未来的核心密码
大数据·网络·人工智能·microsoft·ai·智能手机
又是努力搬砖的一年2 小时前
elasticsearch修改字段类型
android·大数据·elasticsearch
语落心生2 小时前
深入理解Flink与Kafka分区策略: 自定义CustomRangePartitioner详解
flink