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

相关推荐
邮科摄像头定制5 小时前
邮科摄像头定制化视觉方案在安全生产中的深度应用
大数据·人工智能
sunxunyong5 小时前
cloudera manager 页面启动nodemanager失败,后端没有启动 8040
大数据·cloudera
weixin_422289376 小时前
【Centos7安装Cloudera Manager5.12、CDH5.12详细步骤】
大数据·cloudera
安达发6 小时前
安达发|旅游经济“爆发“!APS软件调整旅行箱生产线收割旅游市场!
大数据·人工智能·物联网·aps排产软件·智能优化排产软件·aps智能优化排程软件
Flink_China7 小时前
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
大数据·flink
wenzhangli78 小时前
筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
大数据·人工智能
Mikhail_G9 小时前
Python初学者入门指南
大数据·运维·开发语言·python·数据分析
isNotNullX10 小时前
kettle好用吗?相较于国产ETL工具有哪些优劣之处?
大数据·数据库·数据仓库·信息可视化·etl
说私域11 小时前
开源AI大模型AI智能名片S2B2C商城小程序源码赋能下的“信息找人”:人工智能时代的精准零售场景
大数据·人工智能·小程序·开源·零售