一.常用的参数

yarn 提交pyspark_jar


其中- -deploy-mode默认为client。

二.Standalone模式

  1. Standalone-client

./spark-submit --master spark://node1:7077 --deploy-mode client --class org.apache.spark.examples.SparkPi …/examples/jars/spark-examples_2.11-2.4.0.jar 100

在这种模式下,我们能够很清楚的在客户端看到 DriverWorker 的通信,因为此时 Driver 是运行在客户端的。

yarn 提交pyspark_yarn 提交pyspark_02

并且:

yarn 提交pyspark_客户端_03


Standalone-client 模式会在客户端看到 task 的执行情况,当客户端提交多个 application 时都会启动自己的 driverdriver 与集群的 worker 有大量的通信,会造成客户端网卡流量激增的问题,这种模式适用于程序测试,不适用于生产环境。

2. Standalone-cluster

./spark-submit --master spark://node1:7077 --deploy-mode cluster --class org.apache.spark.examples.SparkPi …/examples/jars/spark-examples_2.11-2.4.0.jar 100

yarn 提交pyspark_spark_04


yarn 提交pyspark_客户端_05


Standalone-cluster模式driver会在集群的随机一台worker节点上启动。如果提交多个application,那么每个application的driver会分散到集群的worker节点,起到一个分担流量的作用。这种模式适用于生产模式。

三.Yarn模式

1.Yarn-client模式提交任务

./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi …/examples/jars/spark-examples_2.11-2.4.0.jar 100

yarn 提交pyspark_客户端_06


yarn 提交pyspark_spark_07


与Standalone-client模式一样,会造成流量激增,适合做测试不适合生产。下面是运行流程序列图:

yarn 提交pyspark_jar_08

2.Yarn-cluster模式提交任务

./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi …/examples/jars/spark-examples_2.11-2.4.0.jar 100

yarn 提交pyspark_jar_09


yarn 提交pyspark_spark_10

与Standalone-cluster模式一样,用集群分散网卡流量负担。

下面是运行流程序列图:

yarn 提交pyspark_spark_11

四.yarn-cluster和yarn-client提交模式的区别与总结

  1. ApplicationMaster的作用:
    当前的Application申请资源
    给nodemanager发送消息 启动Excutor。
    任务调度。(这里和client模式的区别是AM具有调度能力,因为其就是Driver端,包含Driver进程)
  2. 如果是yarn-cluster模式,spark-submit在提交的时候请求到ResourceManager,请求来启动ApplicationMaster,ResourceManager接收到请求后会分配一个container,在某个NodeManager上启动ApplicationMaster,ApplicationMaster(AM)启动后会反过来向ResourceManager进行通讯,其实这个ApplicationMaster就相当于是driver,AM找RM请求container,启动excutor,然后RM会分配一批container,用于启动executor,AM链接其他的NM,来启动executor,这里的NM相当于worker,executor向AM反向注册。ResourceManager相当于之前的master。
  3. yarn-client模式,spark-submit在提交的时候发送给RM,请求启动AM,分配一个container,在某个NM上,启动AM,但是这里的AM只是一个ExecutorLauncher,功能是很有限的。AM启动后会找RM申请container,启动executor,AM链接其他的NM,用container的资源来启动executor。executor会反向注册到本地的driver上。
  4. 区别:yarn-cluster不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。yarn-cluster的driver相当于就是在NodeManager上的某一个ApplicationMaster;yarn-client的driver还是在本地启动的一个进程,在NodeManager启动的ApplicationMaster只是一个ExecutorLauncher,ExecutorLauncher只会向ResourceManager申请资源,然后用container资源去链接其他的NodeManager,然后去启动executor,executor启动后会反向注册到提交应用程序的本地客户端的driver进程上,通过本地客户端的driver进程里面的DAGScheduler、TaskScheduler会大量进行task的调度,发送到NodeManager上的executor上去执行。