【Spark】spark执行模式
一、standalone模式
1.standalone下的client模式
./spark-submit --master spark://node1:7077 --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.2.1.jar 1000
或者
./spark-submit --master spark://node1:7077 --deploy-mode client --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.2.1.jar 1000
执行原理图:
client:执行任务的节点
application:spark代码
①Worker节点和Master节点是会进行通信的,Worker会把资源信息反馈给Master
②client端提交application,client端会启动driver,来进行任务调度。
③driver会向Master申请用于执行application的资源
④申请到资源以后,driver会把task任务发送到Worker端执行
⑤worker端会将执行情况和结果返回给driver
缺点:存在流量激增问题,比如说一个节点上要执行好几千个application,那么这个节点上就会有几千个driver,就会导致客户端所在的节点上存在网卡流量暴增的问题。所以这个模式一般只用于测试
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.2.1.jar 100
注意:
Standalone-cluster提交方式,应用程序使用的所有jar包和文件,必须保证所有的worker节点都要有,因为此种方式,spark不会自动上传包。
解决方式:
(1)将所有的依赖包和文件打到同一个包中,然后放在hdfs上。
(2)将所有的依赖包和文件各放一份在worker节点上
执行原理图:
①client提交application应用程序,然后会向Master申请启动Driver
②Master会随机找一台节点启动driver
③driver启动后会向Master申请用于执行application的资源
④申请到资源以后,driver会把任务发送到worker节点上执行
⑤worker端会把执行情况和结果返回给driver
总结Standalone两种方式提交任务,Driver与集群的通信包括:
1. Driver负责应用程序资源的申请
2. 任务的分发。
3. 结果的回收。
4. 监控task执行情况
二、YARN模式
1.yarn下的client模式
./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.2.1.jar 100
执行原理图:
①客户端提交application,会在当前节点启动一个driver
②发送请求到ResourceManager,请求启动ApplicationMaster
③RM收到请求后会随机在一台NodeManager节点上启动AM
④AM启动后会向RM申请一批Container资源用于启动Executor
⑤RM会返回一批NM节点
⑥AM收到这些NM节点信息之后会去对应的NM上启动Executor,Executor启动后会反向注册给driver
⑦driver会把task任务发送到Executor上执行,并且监控task执行情况,回收结果
缺点:同样存在流量激增问题,比如说一个节点上要执行好几千个application,那么这个节点上就会有几千个driver,就会导致客户端所在的节点上存在网卡流量暴增的问题。所以这个模式一般只用于测试
2.yarn下的cluster模式
./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.2.1.jar 100
执行原理图:
①客户端提交application,发送请求到RS,请求启动AM
②RM会随机找一台NM节点启动AM,这时AM相当于driver端
③AM启动后会向RS请求一批Container用于启动Executor
④RS会返回一批NM节点
⑤AM会去启动Executor,executor启动后会反向注册给deriver
⑥driver会发送task任务到executor上执行,并监控执行情况,回收结果
ApplicationMaster的作用:
1.为当前的Application申请资源
2.给NodeManger发送消息启动Excutor。
3.任务调度。