当前位置: 首页 > news >正文

YARN Cluster模式和Client模式的区别是什么

在 Apache Spark 的 YARN 部署中,Cluster 模式Client 模式的核心区别在于 Driver 的启动位置客户端(提交任务的机器)的角色。以下是两者的详细对比:


1. 核心区别概览

特性YARN Cluster 模式YARN Client 模式
Driver 位置在 YARN 集群的某个容器(Container)中运行(由 ResourceManager 分配)。在提交任务的客户端机器(如边缘节点)运行。
客户端角色提交任务后即可断开连接,无需保持运行。客户端必须保持运行,直到任务结束(否则任务失败)。
日志输出日志存储在 YARN 集群中,需通过 yarn logs 命令查看。日志直接输出到客户端控制台,方便调试。
适用场景生产环境(长期运行的任务)。开发/调试环境(需要实时查看日志或交互式任务)。
资源分配Driver 的资源由 YARN 集群管理(通过 spark.driver.memory 等配置)。Driver 的资源由客户端本地资源决定(可能受限)。
容错性Driver 崩溃时,YARN 可重启 ApplicationMaster(需配置重试次数)。客户端崩溃会导致 Driver 和整个任务失败。

2. 详细对比

(1) Driver 的启动位置
  • Cluster 模式
    • Driver 作为 YARN 的 ApplicationMaster(AM) 在集群中启动。
    • AM 由 ResourceManager 分配到一个 Container,并在该 Container 中运行用户的主类(即 --class 指定的类)。
    • 用户代码在集群内部执行,客户端仅负责提交任务。
  • Client 模式
    • Driver 在提交任务的客户端机器(如本地开发机或边缘节点)上启动。
    • AM 仅负责申请 Executor 资源,不运行用户代码。
    • 用户代码在客户端本地执行,客户端需保持存活。
(2) 客户端依赖
  • Cluster 模式
    • 客户端提交任务后即可退出,任务由 YARN 完全托管。
    • 适合自动化任务调度(如通过 Airflow 定时提交)。
  • Client 模式
    • 客户端必须持续运行,直到任务结束(否则 Driver 进程终止,导致任务失败)。
    • 适合交互式场景(如 Spark Shell、Jupyter Notebook)。
(3) 日志与调试
  • Cluster 模式
    • 日志通过 YARN 的日志聚合机制存储到 HDFS,需通过以下命令查看:
      yarn logs -applicationId <app_id>
      
    • 适合生产环境,但调试不够直观。
  • Client 模式
    • 日志直接输出到客户端控制台,方便实时查看任务进展和错误。
    • 适合开发和调试阶段。
(4) 资源管理
  • Cluster 模式
    • Driver 的资源(内存、CPU)通过 YARN 配置(如 spark.driver.memory)。
    • Executor 的资源由 YARN 动态分配。
    • 适合资源需求较高的任务。
  • Client 模式
    • Driver 的资源受限于客户端机器的配置(如本地内存不足可能导致 OOM)。
    • Executor 的资源仍由 YARN 管理。
    • 需谨慎分配 Driver 内存(尤其是使用 collect() 等操作时)。
(5) 容错性
  • Cluster 模式
    • 若 ApplicationMaster(Driver)失败,YARN 可自动重启(需配置 spark.yarn.maxAppAttempts)。
    • 适合高可靠性要求的任务。
  • Client 模式
    • 客户端机器崩溃或网络中断会导致 Driver 进程终止,任务直接失败。
    • 无自动恢复机制。

3. 适用场景

模式典型场景
YARN Cluster- 生产环境中的定时批处理任务。
- 需要客户端断开连接的长时任务(如 ETL 流程)。
YARN Client- 开发调试(如 Spark Shell、PySpark 交互式环境)。
- 需要实时查看日志的任务。

4. 配置与命令示例

(1) 提交命令
  • Cluster 模式
    spark-submit \
      --master yarn \
      --deploy-mode cluster \
      --class com.example.Main \
      --executor-memory 4g \
      --driver-memory 2g \
      myapp.jar
    
  • Client 模式
    spark-submit \
      --master yarn \
      --deploy-mode client \
      --class com.example.Main \
      --driver-memory 2g \  # 此配置仅影响客户端本地 Driver
      myapp.jar
    
(2) 关键配置
  • Cluster 模式
    • spark.driver.memory: 控制 Driver(AM)的内存。
    • spark.yarn.maxAppAttempts: 设置 AM 的最大重试次数。
  • Client 模式
    • 本地机器的资源(如内存)需满足 Driver 需求。

5. 常见问题

Q1: 为什么 Cluster 模式更适合生产环境?
  • 资源隔离:Driver 在集群中运行,避免客户端资源瓶颈。
  • 高可用性:YARN 可自动重启失败的 AM。
  • 客户端无依赖:提交后即可释放客户端资源。
Q2: Client 模式下 collect() 导致 OOM 如何解决?
  • 避免在 Client 模式下拉取大量数据到 Driver。
  • 使用分布式写入操作(如 saveAsTextFile())替代 collect()
  • 增加客户端机器的内存或调整 --driver-memory
Q3: 如何选择模式?
  • 开发/调试:优先使用 Client 模式(实时日志)。
  • 生产/长时任务:必须使用 Cluster 模式。

总结

  • YARN Cluster 模式:Driver 在集群中,客户端无依赖,适合生产。
  • YARN Client 模式:Driver 在客户端,适合开发和调试。
    选择时需权衡 资源管理日志可见性容错需求

相关文章:

  • 若依框架二次开发——启动 RuoYi-Cloud 微服务项目
  • Go常见问题与答案笔记
  • Event driven agentic document workflows 笔记 - 4
  • Redis之大key问题
  • hackthebox1:入门
  • 19,C++——11
  • LeetCode热题100精讲——Top5:盛最多水的容器【双指针】
  • 微服务 - 高级篇
  • NSSRound(持续更新)
  • 【Linux】文件查找、软硬链接、动静态库
  • 2025跳槽学习计划
  • Qt窗口控件之浮动窗口QDockWidget
  • 23种设计模式-创建型模式-建造者
  • 基于AWS Endpoint Security(EPS)的全天候威胁检测与响应闭环管理
  • Docker-初级安装及使用
  • 干货分享|DeepSeek技术革命、算力范式重构与场景落地洞察
  • 腾讯面经,有点难度~
  • C++KNN 算法应用痛点:从受噪声干扰到精准预测的突破
  • spring +kotlin 配置redis 和redis的常用方法
  • Python:互斥锁,线程同步及总结
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查
  • 坚持吃素,是不是就不会得高血脂了?
  • 香港特区立法会通过条例草案便利外地公司迁册来港
  • 深圳中院回应“退休夫妻月入1.2万负债1.2亿”:其自述因经营不善负债