一、基于Standalone提交任务
1.基于Standalone-client提交任务
--deploy-mode:不写,默认就是client提交
也可以配置:--deploy-mode client
./spark-submit --master spark://node1:7077 \
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
Spark基于Standalone-client模式提交任务,首先Driver是在客户端启动,每当在客户端提交一个Spark Application,就会启动一个Driver。每个Application都会有自己独立的Driver,Driver与集群中的Worker有大量的通信,如果在客户端提交大量的Application,会造成客户端网卡流量激增问题。在客户端可以看到task执行日志和结果。这种模式适用于程序测试,不适用生产环境。
2.基于Standalone-cluster提交任务
注意:在cluster模式下,jar包需要放到集群每台节点可以访问的目录(如HDFS),如果是放在本地,需要在每个节点上都放置一份
./spark-submit --master spark://node1:7077 --deploy-mode cluster \
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
Spark基于Standalone-cluster模式提交任务,首先客户端会向Master申请启动Driver,Driver是随机在一台满足资源的Worker节点上启动,如果在客户端提交多个Spark Application,每个Application的Driver是分散在集群中启动的,解决了单节点网卡流量激增问题。这种模式适用于生产环境,在客户端看不到task执行日志和结果,需要去Spark的WebUI中查看。
二、基于Yarn提交任务
1.Yarn-client提交任务方式
./spark-submit --master yarn \
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
Spark基于Yarn-client模式提交任务,Driver首先在客户端启动,当客户端提交多个Spark Application时,每个Application都有独立的Driver,Driver与与集群有大量的通信,会有单节点网卡流量激增的问题。这种模式适用于程序测试,不适用与生产环境,在客户端可以看到task的执行和结果。
2.Yarn-cluster提交任务方式
./spark-submit --master yarn --deploy-mode cluster \
--class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100
Spark基于Yarn-cluster模式提交任务,Yarn的ApplicationMaster启动之后就是相当于Driver,负责task发送,当在客户端提交多个Spark Application时,每个Application都会有独立的AM,AM是分散在集群中启动,相当于将client模式中的单节点网卡流量激增问题分散到集群中。这种模式适用于生产环境,在客户端看不到task的执行日志和结果,要去Yarn的WebUI看。