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

相关推荐
小牛头#4 小时前
clickhouse 各个引擎适用的场景
大数据·clickhouse·机器学习
lifallen6 小时前
Paimon LSM Tree Compaction 策略
java·大数据·数据结构·数据库·算法·lsm-tree
元宇宙时间6 小时前
全球发展币GDEV:从中国出发,走向全球的数字发展合作蓝图
大数据·人工智能·去中心化·区块链
张先shen9 小时前
Elasticsearch RESTful API入门:基础搜索与查询DSL
大数据·spring boot·elasticsearch·搜索引擎·全文检索·restful
isNotNullX10 小时前
数据中台架构解析:湖仓一体的实战设计
java·大数据·数据库·架构·spark
数据库安全13 小时前
首批|美创智能数据安全分类分级平台获CCIA“网络安全新产品”
大数据·人工智能·web安全
袋鼠云数栈14 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
阿里云大数据AI技术14 小时前
数据 + 模型 驱动 AI Native 应用发展
大数据·数据库·人工智能
朴拙数科15 小时前
在 macOS 上安装与自定义 Oh My Zsh:让终端美观又高效 [特殊字符]
大数据·elasticsearch·macos
Qdgr_18 小时前
传统报警难题频现,安全运行隐患重重
大数据·人工智能·安全