1.yarn-client 提交任务方式

提交命令

[root@node4 bin]# ./spark-submit --master yarn --class org.apache.spark.examples.SparkPi /opt/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar 100
[root@node4 bin]# ./spark-submit --master yarn-client --class org.apache.spark.examples.SparkPi /opt/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar 100
[root@node4 bin]# ./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi /opt/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar 100
#以上三种方式提交都可以

执行原理图解
Spark 基于 Yarn 模式提交任务_big data
执行流程

  1. 客户端提交一个 Application,在客户端启动一个 Driver 进程。
  2. 应用程序启动后会向 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 端。

总结:Yarn-client 模式同样是适用于测试,因为 Driver 运行在本地, Driver 会与 yarn 集群中的 Executor 进行大量的通信,会造成客户 机网卡流量的大量增加.

ApplicationMaster 的作用:

  • 为当前的 Application 申请资源
  • 给 NameNode 发送消息启动 Executor。

注意:ApplicationMaster 有 launchExecutor 和申请资源的功能, 并没有作业调度的功能。

2.yarn-cluster 提交任务方式

提交命令

[root@node4 bin]# ./spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi /opt/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar 100
[root@node4 bin]# ./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /opt/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar 100
#两种提交方式

执行原理图解
Spark 基于 Yarn 模式提交任务_jar_02
执行流程

  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。

总结:Yarn-Cluster 主要用于生产环境中,因为 Driver 运行在 Yarn 集群 中某一台 nodeManager 中,每次提交任务的 Driver 所在的机器都 是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务 提交后不能看到日志。只能通过 yarn 查看日志。

ApplicationMaster 的作用:

  • 为当前的 Application 申请资源
  • 给 NameNode 发送消息启动 Excutor。
  • 任务调度。

停止集群任务命令:yarn application -kill applicationID