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
#以上三种方式提交都可以
执行原理图解
执行流程
- 客户端提交一个 Application,在客户端启动一个 Driver 进程。
- 应用程序启动后会向 RS(ResourceManager)发送请求,启动 AM(ApplicationMaster)的资源。
- RS 收到请求,随机选择一台 NM(NodeManager)启动 AM。这 里的 NM 相当于 Standalone 中的 Worker 节点。
- AM 启动后,会向 RS 请求一批 container 资源,用于启动 Executor
- RS 会找到一批 NM 返回给 AM,用于启动 Executor。
- AM 会向 NM 发送命令启动 Executor。
- 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
#两种提交方式
执行原理图解
执行流程
- 客户机提交 Application 应用程序,发送请求到 RS(ResourceManager),请求启动 AM(ApplicationMaster)。
- RS 收到请求后随机在一台 NM(NodeManager)上启动 AM(相 当于 Driver 端)。
- AM 启动,AM 发送请求到 RS,请求一批 container 用于启动 Executor。
- RS 返回一批 NM 节点给 AM。
- AM 连接到 NM,发送请求到 NM 启动 Executor。
- Executor 反向注册到 AM 所在的节点的 Driver。Driver 发送 task 到 Executor。
总结:Yarn-Cluster 主要用于生产环境中,因为 Driver 运行在 Yarn 集群 中某一台 nodeManager 中,每次提交任务的 Driver 所在的机器都 是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务 提交后不能看到日志。只能通过 yarn 查看日志。
ApplicationMaster 的作用:
- 为当前的 Application 申请资源
- 给 NameNode 发送消息启动 Excutor。
- 任务调度。
停止集群任务命令:yarn application -kill applicationID