Spark中yarn-client和yarn-cluster区别详解

我们来详细讲解一下 Spark on YARN 模式下 yarn-clientyarn-cluster (在 Spark 后期版本中统一为 cluster 模式,但 YARN 集群模式有其特殊性) 的区别。

这是一个在学习和使用 Spark 时非常核心的概念,主要关系到Driver程序运行的位置,而这个差异又直接影响了应用程序的行为、容错、性能和适用场景。


核心概念:Driver 是什么?

在深入区别之前,必须理解 Driver 的角色。

  • Driver 是 Spark 应用程序的“大脑”。
  • 它执行用户的 main 函数并创建 SparkContext
  • 它负责:
    • 将用户程序转换为有向无环图(DAG)
    • 将 DAG 调度为任务(Task),并在 Executor 上执行。
    • 跟踪任务的执行情况和 Executor 的状态。
    • 展示结果(例如,在 collect() 操作后,将数据拉取到本地并打印)。

简单说,Driver 是应用的指挥官,而 Executor 是负责干活的士兵

yarn-clientyarn-cluster 的根本区别就在于:这个“指挥官”(Driver)坐在哪里指挥作战。


1. YARN-Client 模式

运行机制
  • Driver 运行在客户端机器上。也就是你提交 spark-submit 命令的那台机器。
  • ApplicationMaster (AM) 的角色被弱化,它主要负责向 YARN 的 ResourceManager (RM) 申请和协商 Executor 的资源。真正的 Driver 逻辑在客户端进程里
  • Executor 在 YARN 的 NodeManager (NM) 容器中启动后,会直接与客户端机器上的 Driver 进行通信。
特点
  • 交互性友好
    • 因为 Driver 在本地,所以标准输出 (stdout) 和错误输出 (stderr) 会直接打印在你的终端上。
    • 你可以直接看到程序的打印语句、查询计划、进度条等。非常适合交互式的工作,比如使用 spark-shell (在 YARN 模式下,spark-shell 默认就是 client 模式)。
  • 快速失败:如果 Driver 失败,你可以立刻在终端看到错误信息,方便调试。
  • 网络依赖
    • 客户端机器必须与 YARN 集群保持网络连通,因为所有的 Executor 都需要和它通信。
    • 如果客户端机器网络不稳定或关机,整个应用就会失败。
  • 资源占用:Driver 运行在客户端,会占用客户端机器的资源(CPU和内存)。
  • 性能考量:如果 Driver 需要从 Executor 拉取大量数据(例如 collect()),所有数据都会通过网络传输到客户端机器,可能成为瓶颈。
适用场景
  • 交互式开发和调试
  • 需要立即看到输出的场景,例如运行一个简单的测试或脚本。
  • 当你的机器与 YARN 集群在同一个局域网,网络状况良好时。

2. YARN-Cluster 模式

运行机制
  • Driver 运行在 YARN 集群内部。具体来说,它运行在 ApplicationMaster (AM) 容器里。
  • 当用户提交应用后,客户端就完成任务并退出了。YARN 的 ResourceManager 会选择一个 NodeManager 来启动 AM,而这个 AM 本身就包含了 Driver 的逻辑
  • Executor 启动后,与这个在集群内部的 AM(即 Driver)进行通信。
特点
  • 更适合生产环境
    • 客户端在提交作业后就可以断开连接,应用会继续在集群中运行,直到结束。这符合生产环境作业调度的需求。
  • 更好的容错性
    • Driver 在 YARN 集群中运行,可以受益于 YARN 的失败重试机制。如果 AM(包含 Driver)失败,YARN 可以在另一个节点上重新启动它。
  • 资源集中管理
    • Driver 的资源(CPU、内存)是通过 YARN 来管理和调度的,与客户端机器无关。这使得集群资源的管理更加统一和公平。
  • 无交互性
    • 你在客户端终端看不到直接的输出。日志(包括你的 println 语句)需要通过 YARN 的日志聚合功能查看(用 yarn logs -applicationId <appId> 命令)。
  • 架构更简洁:所有组件都在集群内,网络通信更可靠,延迟更低。
适用场景
  • 生产环境批处理作业
  • 需要长时间运行的作业。
  • 当客户端机器可能不稳定或需要断开连接时。

核心区别对比表格

特性YARN-ClientYARN-Cluster
Driver 位置客户端进程YARN 集群内的 ApplicationMaster
交互性,输出直接显示在终端,需要通过日志查看
客户端角色必须保持存活和网络连通提交后即可断开
容错性客户端宕机导致应用失败YARN 可重启失败的 ApplicationMaster
资源管理Driver 资源由客户端机器提供Driver 资源由 YARN 统一管理
适用场景开发、测试、交互式查询生产环境、批处理作业
Spark Shell默认且唯一支持的模式不支持

如何选择与使用

在提交应用时,通过 --deploy-mode 参数来指定模式:

YARN-Client 模式:

./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode client \  # 指定为 client 模式
  /path/to/examples.jar \
  100

YARN-Cluster 模式:

./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode cluster \  # 指定为 cluster 模式
  /path/to/examples.jar \
  100
选择建议:
  1. 开发和调试阶段:使用 yarn-client。你能立即看到错误信息和输出,极大提高调试效率。
  2. 生产环境务必使用 yarn-cluster。它更稳定、更健壮,符合生产调度的要求。

注意:从 Spark 1.0 开始,术语有所变化。现在更通用的说法是:

  • client 模式:对应 yarn-client
  • cluster 模式:对应 yarn-cluster (当 Master 是 YARN 时)。

所以你现在会经常看到 --master yarn --deploy-mode cluster 这样的组合。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值