spark StandAlone
standalone模式是spark集群自带的分布式集群模式,不依赖其他的资源调度框架
-
standalone模式首先启动master
-
然后再启动worker,worker会与master建立连接;master可以不知道有多少个worker,但worker一定要知道master的地址,它们底层通过RPC通信,通信端口是7077,spark1.5之前使用akka,spark1.6支持两中akka和netty,spark2.0开始,使用netty通信
-
worker向master注册,把这个worker的节点管理的资源信息汇报给master
-
master把这个信息保存起来之后,向worker发送一个注册成功的消息
-
worker接收到之后,定期向master发送心跳(报活)
-
master内部有一个定时器,会定期检测超时的worker,如果worker超时,会把超时的worker移除
client
spark standalone提交到集群中,默认的模式为client模式,默认参数是 --deploy-mode client
此模式中,Driver是在SparkSubmit进程中
-
Driver启动后会向master申请资源
-
master维护workers的信息,它会根据各个worker的资源情况,决定在哪些worker上启动executor
-
master在内部把需要的资源进行逻辑划分,默认是在满足条件的worker均匀划分的
-
master把以后需要启动的executor的描述信息发给worker
-
worker收到描述信息之后,会启动一个子进程(executor)
-
executor向driver反向注册
-
在driver里写spark程序,构建DAG,切分stage,一个stage对应一个taskSet,一个taskSet里面的计算逻辑都是相同的,只是处理数据不同,一个taskSet里面有多少个task,取决于这个stage最后一个RDD有多少个分区.然后它会先提交前面的stage,在提交后面的stage
cluster
--deploy-mode cluster
Driver在集群中的某一个worker中
-
cluster模式中,submit向master申请资源,把主类,jar包,需要的资源发给master,submit的任务就结束了
-
master先只和一个worker通信,让worker启动DriverWapper
-
然后与master通信,让master通知worker启动executor
-
executor启动后向DriverWapper注册
-
之后构建DAG,划分stage...
spark ON YARN
client
driver是在任务提交的客户端中启动
cluster
driver是在集群节点中随机选取启动
- client向RM申请资源,返回一个applicationId
- client上传spak jars下的包,自己写的jar和配置
- RM随机找一个资源充足的NM
- 然后让NM从hdfs上下载jar包和配置,启动AM
- AM向RM申请资源
- RM中的ResourceScheduler找到符合条件的NM,将NM信息返回给AM
- AM和返回的NM通信
- NM从hdfs下载依赖
- NM启动Executor
- Executor启动之后反向向AM注册