logo

Flink on YARN单机部署全攻略:从环境搭建到作业提交

作者:问题终结者2025.09.17 11:04浏览量:1

简介:本文详细介绍了如何在单机环境下通过YARN部署Apache Flink,包括环境准备、安装配置、集群启动及作业提交的全流程,适合开发者快速上手。

Flink on YARN单机部署全攻略:从环境准备到作业提交

摘要

Apache Flink作为流批一体的分布式计算框架,与YARN资源管理系统的结合能高效利用集群资源。本文针对单机环境,详细阐述Flink on YARN的部署流程,涵盖环境准备、安装配置、集群启动、作业提交及常见问题处理,帮助开发者快速构建本地测试环境。

一、环境准备:基础条件与软件依赖

1.1 硬件与系统要求

单机部署需满足:

  • 硬件:至少4核CPU、8GB内存(建议16GB+)、50GB+磁盘空间(用于日志和临时文件)。
  • 操作系统:Linux(推荐CentOS/Ubuntu)或macOS(需配置本地YARN环境)。
  • 网络:确保主机名可解析(通过/etc/hosts配置),避免YARN任务注册失败。

1.2 软件依赖清单

软件 版本要求 用途
Java JDK 8或11(推荐) Flink/YARN运行环境
Hadoop 2.7+(YARN兼容) 提供YARN资源管理服务
Flink 1.15+(最新稳定版) 核心计算框架

验证步骤

  1. # 检查Java版本
  2. java -version
  3. # 检查Hadoop版本(若单独安装)
  4. hadoop version

二、安装与配置:分步骤详解

2.1 Hadoop YARN单机配置

  1. 下载Hadoop:从官网获取二进制包(如hadoop-3.3.4.tar.gz)。
  2. 解压与配置
    1. tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
    2. cd /opt/hadoop-3.3.4/etc/hadoop
  3. 修改核心配置

    • core-site.xml:设置HDFS默认路径(单机模式可省略HDFS,但需配置YARN)。
    • yarn-site.xml
      1. <property>
      2. <name>yarn.nodemanager.local-dirs</name>
      3. <value>/tmp/yarn/local</value>
      4. </property>
      5. <property>
      6. <name>yarn.nodemanager.log-dirs</name>
      7. <value>/tmp/yarn/logs</value>
      8. </property>
    • mapred-site.xml(可选):配置MapReduce历史服务。
  4. 启动YARN

    1. # 格式化(仅首次需要)
    2. hdfs namenode -format # 若使用HDFS
    3. # 启动YARN资源管理器
    4. start-yarn.sh
    5. # 验证服务
    6. jps # 应看到ResourceManager、NodeManager进程
  1. 下载Flink
    1. wget https://archive.apache.org/dist/flink/flink-1.17.0/flink-1.17.0-bin-scala_2.12.tgz
    2. tar -xzvf flink-1.17.0-bin-scala_2.12.tgz -C /opt/
  2. 配置Flink
    • 修改/opt/flink-1.17.0/conf/flink-conf.yaml
      1. # 指定YARN任务管理器内存
      2. taskmanager.memory.process.size: 1024m
      3. # YARN应用名称
      4. yarn.application.name: Flink-on-YARN-Demo
    • 设置环境变量(~/.bashrc):
      1. export FLINK_HOME=/opt/flink-1.17.0
      2. export PATH=$PATH:$FLINK_HOME/bin

三、集群启动与作业提交:从命令到实践

  1. 会话模式(长期运行)

    1. yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024
    • -n:TaskManager数量
    • -s:每个TaskManager的插槽数
    • -jm:JobManager内存(MB)
    • -tm:TaskManager内存(MB)
  2. 单作业模式(推荐测试)

    1. flink run -m yarn-cluster -yn 2 -ys 2 -yjm 1024 -ytm 1024 ./examples/streaming/WordCount.jar
    • -m yarn-cluster:指定YARN集群模式
    • -yD:动态参数(如-yD taskmanager.numberOfTaskSlots=4

3.2 作业提交与监控

  1. 通过Web UI监控

    • YARN ResourceManager UI(默认http://localhost:8088)查看应用状态。
    • Flink Web UI(通过YARN应用日志或yarn application -list获取端口)。
  2. 日志查看

    1. # 查看JobManager日志
    2. yarn logs -applicationId <app_id> | grep "JobManager"
    3. # 实时跟踪TaskManager日志
    4. yarn logs -applicationId <app_id> -logFiles stderr

四、常见问题与解决方案

4.1 内存不足错误

  • 现象Container killed by YARN for exceeding memory limits
  • 解决
    • 调整flink-conf.yaml中的内存参数:
      1. taskmanager.memory.task.heap.size: 512m
      2. taskmanager.memory.managed.size: 256m
    • 增加YARN容器内存:
      1. yarn-session.sh -tm 2048 # 增大TaskManager内存

4.2 端口冲突

  • 现象Address already in use
  • 解决
    • 修改flink-conf.yaml中的端口:
      1. rest.port: 8082
      2. jobmanager.rpc.port: 6123
    • 或通过命令行参数指定:
      1. yarn-session.sh -Drest.port=8083

4.3 版本兼容性问题

  • 现象ClassNotFoundIncompatibleClassChangeError
  • 解决
    • 确保Hadoop与Flink版本兼容(如Hadoop 3.x需Flink 1.14+)。
    • 检查依赖冲突:
      1. mvn dependency:tree # 若使用Maven项目

五、优化建议:提升单机性能

  1. 内存调优

    • 分配70%内存给TaskManager,20%给JobManager,10%给系统。
    • 示例配置:
      1. taskmanager.memory.process.size: 4096m
      2. taskmanager.memory.framework.heap.size: 256m
  2. 并行度设置

    • 根据CPU核心数调整:
      1. flink run -p 4 ./job.jar # 设置并行度为4
    • 或在代码中配置:
      1. env.setParallelism(4);
  3. 日志管理

    • 配置log4j.properties减少日志量:
      1. rootLogger.level = INFO
      2. logger.akka.name = akka
      3. logger.akka.level = WARN

六、总结与扩展

通过本文,开发者已掌握Flink on YARN单机部署的全流程,包括环境配置、集群启动、作业提交及故障排查。下一步可探索:

  • 多节点部署:扩展至分布式集群。
  • 高可用配置:通过Zookeeper实现JobManager HA。
  • Kubernetes集成:对比YARN与K8s的资源管理差异。

附:完整命令示例

  1. # 1. 启动YARN
  2. start-yarn.sh
  3. # 2. 启动Flink YARN会话
  4. yarn-session.sh -n 2 -s 2 -jm 1024 -tm 2048 -Drest.port=8082
  5. # 3. 提交作业
  6. flink run -m yarn-cluster -c com.example.MainClass ./job.jar

通过系统化的配置与调优,Flink on YARN单机环境既能满足开发测试需求,也可为生产部署提供实践参考。

相关文章推荐

发表评论