Spark运行在yarn集群上的两种提交方式

本文详细介绍了在YARN集群上使用Spark的两种提交方式:client和cluster模式。对比了standalone与YARN集群的提交命令,深入解析了两种模式下的执行原理与流程,包括资源请求、AM启动、Executor分配等关键步骤。

Spark集群简单介绍

如前面几篇博客介绍的
Spark集群分为四种:

  • local
  • stand alone
  • yarn
  • mesos

这里我们就拿yarn来介绍。

yarn集群的两种提交方式

首先spark跑在yarn集群上,必须要开启HDFS,因为包要上传到HDFS上,但是standalone集群是不必开启的,因为要是开启的话,就会有两套spark集群,当你提交Application时就可能出现资源抢夺问题。

client

standalone集群和yarn集群提交命令的比较:

  1. Stand alone:spark-submit --master spark://node01:7077
  2. yarn:spark-submit --master yarn-client --class org.apache.spark.examples.SparkPi …/lib/spark-examples-1.6.3-hadoop2.6.0.jar 10

执行原理

执行流程

  1. 客户端提交一个Application,在客户端启动一个Driver进程

  2. Driver进程会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。

  3. RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。

  4. AM启动后,会向RS请求一批container资源,用于启动Executor

  5. RS会找到一批NM返回给AM,用于启动Executor。

  6. AM会向NM发送命令启动Executor。

  7. Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。

cluster

提交命令(两种)

./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi …/lib/spark-examples-1.6.0-hadoop2.6.0.jar 100

./spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi …/lib/spark-examples-1.6.0-hadoop2.6.0.jar 100

执行原理

执行流程

  1. 客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
  2. RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
  3. AM启动,AM发送请求到RS,请求一批container用于启动Executor。
  4. RS返回一批NM节点给AM。
  5. AM连接到NM,发送请求到NM启动Executor。
  6. Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。
### 作业提交方式概述 Spark on YARN 支持两种主要的作业提交方式:`client`模式和`cluster`模式。这两种模式在执行流程和资源管理方面存在显著差异,适用于不同的使用场景。 #### Client 模式 在`client`模式下,**Driver 进程运行提交作业的客户端机器上**,而不是在 YARN 集群内部。这意味着客户端必须保持运行状态,直到作业完成。该模式适用于交互式作业或调试阶段,因为用户可以直接在控制台看到作业的执行日志和进度。 一个典型的提交命令如下: ```bash spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./spark-examples_2.11-2.4.7.jar ``` 在该模式下,Driver 与 ApplicationMaster 之间的通信需要通过网络进行,可能会受到网络延迟的影响。但同时,由于 Driver 运行在本地,便于调试和查看日志[^4]。 #### Cluster 模式 在`cluster`模式下,**Driver 进程运行YARN 集群内部的 ApplicationMaster 中**,客户端提交作业后即可关闭。该模式适用于生产环境中的长时间运行作业,因为即使客户端断开连接,作业仍可在集群中继续执行。 一个典型的提交命令如下: ```bash spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ ./spark-examples_2.11-2.4.7.jar ``` 该模式下,作业的生命周期由 YARN 管理,Driver 运行集群内部,减少了网络依赖,提高了作业的稳定性和容错性。同时,可以通过 Spark 历史服务器查看已完成作业的执行日志和状态[^3]。 #### 作业提交流程 在提交作业时,客户端首先向 YARN 的 ResourceManager 提交应用程序请求。ResourceManager 会验证权限并生成 Job ID 和资源上传路径,随后客户端将 jar 包、配置文件等上传到 HDFS 中的指定路径。之后,客户端再次向 ResourceManager 提交执行请求。 ResourceManager 接收到请求后,将任务封装为一个 Application 并插入调度器的任务队列中。当集群中有空闲资源时,调度器将任务分配给某个 NodeManager,NodeManager 启动容器并运行 ApplicationMaster。 ApplicationMaster 从 HDFS 中拉取 jar 包,解析数据流(DAG),生成执行阶段(Stage),并向 ResourceManager 申请资源。ResourceManager 接收到资源请求后,将任务封装为 Task 并插入任务队列。当有空闲资源时,任务被分配给 NodeManager,NodeManager 启动容器并与 ApplicationMaster 通信以启动 Executor 进程。 Executor 向 ApplicationMaster 注册并申请任务,ApplicationMaster 将 Task 分发到 Executor 上执行。Executor 执行 Task 并将结果或状态报告给 ApplicationMaster。当所有任务执行完毕时,ApplicationMaster 通知 ResourceManager 注销应用并回收资源[^5]。 #### 适用场景 - **Client 模式**适用于需要与用户进行交互的场景,例如调试、测试或短时间运行的作业。 - **Cluster 模式**适用于生产环境中的长时间运行作业,尤其是那些需要高可用性和容错性的任务。 #### 配置与管理 在使用 Spark on YARN 提交作业时,还需要注意一些配置项,例如资源分配(`--executor-memory`、`--executor-cores`)、队列选择(`--queue`)、日志级别(`--conf spark.driver.extraJavaOptions`)等。这些参数可以通过`spark-submit`命令进行灵活配置,以满足不同作业的需求[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值