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作业,充分发挥两者的协同优势。掌握不同部署模式的特点和适用场景,合理配置资源参数,能够有效提升作业性能和集群稳定性。

相关推荐
Raas1001 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持哪些模型?从原理到落地
大数据·人工智能·网关·gateway·mai gateway·企业级产品
YangYang9YangYan4 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
大大大大晴天4 小时前
OpenMetadata VS DataHub VS Atlas VS Gravitino
大数据
Qyr997 小时前
2026全球汽车碳刷行业发展全景分析报告
大数据
蓝速科技8 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
精益数智工坊8 小时前
云计算环境数据怎么同步?云计算集成方案有哪些?
大数据·人工智能·数据挖掘·数据可视化
huashengzsj9 小时前
什么是DMS经销商管理系统?国内经销商管理系统有哪些品牌
大数据
IT毕设梦工厂10 小时前
计算机毕业设计选题推荐:基于大数据的草鱼价格分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·大数据毕设项目
辛迪聊物业数字化11 小时前
智慧社区物业管理软件新手部署与实操指南
大数据·php
字节跳动数据平台11 小时前
模型再强,为什么 Demo 还是进不了生产?
大数据