1.StandAlone 模式
1.1 Client 模式
流程:
Client模式Drive运行在Client上,使用Spark Shell提交任务的时候,Drive运行在Master上
1.Spark Context 连接到Master,并向Master注册申请资源
2.Master根据sc提出的申请,检测Worker的心跳,并找到有资源的Worker,并在Worker上启动Executor,
3.启动Executor的Worker机器向SC注册
4.SC将应用分配给Executor
5.SC解析应用,创建DAG图,提交给DAGScheduler分解成一个或多个Stage。然后Stage被发送给TaskScheduler,TaskScheduler负责将Stage中的Task分配到相应的Worker中的Executor中执行
6.Executor会生成Executor线程池,开始执行Task,并向SC汇报Task执行的状态和进度
7.当所有的Task执行结束后,SC向Master注销
/bigdata/spark-2.3.3-bin-hadoop2.7/bin/spark-submit --master spark://node-1:7077 --class spark.day01.WordCount --deploy-mode client /root/spark10-1.0-SNAPSHOT.jar hdfs://node-1:9000/wc hdfs://node:9000/out01
1.2 Cluster 模式
特点:Driver运行在集群中,不在SparkSubmit进程中,需要将jar包上传到hdfs中
/bigdata/spark-2.3.3-bin-hadoop2.7/bin/spark-submit --master spark://node-1:7077 --class spark.day01.WordCount --deploy-mode client hdfs://node-1:9000/jars/spark10-1.0-SNAPSHOT.jar hdfs://node-1:9000/wc hdfs://node-1:9000/out002
2. On Yarn 模式
2.1 Client 模式
流程:
1.客户端提交一个Application,在客户端启动一个Driver进程
2.Driver进程会向ResourceManger发送请求,会启动ApplicationMaster的资源
3.ResourceManger会随机选择一台NodeManger,然后改NodeManger回到HDFS中下载jar包和配置,接着启动ApplicationMaster【ExecutorLuacher】。这里的NodeManger相当于StandAlone中的Worker节点
4.ApplicationMaster启动后,会向ResourceManager请求一批container资源,用于启动Executor.
5.ResourceManager会找到一批符合条件NodeManager返回给ApplicationMaster,用于启动Executor。
6.ApplicationMaster会向NodeManager发送请求,NodeManager到HDFS下载jar包和配置,然后启动Executor。
7.Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端
2.2 Cluster 模式
执行流程:
1.client向RM申请资源,RM会返回一个application ID
2.client上传spark jars下面的jar包以及自己写的jar包和配置
3.RM随机找一个资源充足的NodeManger
4.然后通过RPC通信让NodeManger从HDFS中下载jar包和配置,并启动ApplicationMaster
5.ApplicationMaster向RM申请资源
6.RM中的ResourceScheduler找到符合条件的NM,将NM的信息返回给ApplicationMaster
7.ApplicationMaster跟返回的NM进行通信
8.NM从HDFS中下载依赖
9.NM启动Executor
10.Executor启动之后反向向ApplicationMaster【Diver】注册