一.standalone client模式
- 1.启动master,和worker ,然后worker向master建立连接,然后把计算机资源汇报给master,然后master保存这些注册信息,然后向worker返回注册成功的信息
- 2.然后worker向master发送心跳,目的是向master报活,
- 3.这时候启动客户端,客户端会提交任务,在提交任务的时候,会指定自身需要多少资源,比如说需要多少内存核,通过底层rcp,与master建立起通信,
- 4.这时候master知道要有任务要提交了,这时候给master先对worker进行一次筛选,看哪些worker需要有足够多的资源,然后master跟哪些有足够多资源的worker进行通信,worker开始启动executor,executor启动起来后,向客户端进行反向注册,
- 5.这时候,driver就跟这些executor建立起连接,
- 6.客户端执行程序,根据有多少个分区,生成有多少个Task,而且task分阶段先后调度到executor里面执行所以整个过程真正处理数据的是,worker里面的executor
二.standalon cluster模式
- 与client模式本质区别是,他的driver运行在集群里面,
- 客户端通过SparkSubmit 向master申请资源,master会先在集群里面启动一个容器,容向注册,
- driver产生多个task,分不同调度task到executor,注意task里面是动态生成的
三.Spark on YARN cluster 模式
- 1.首先有一个客户端,client,向ResourceManager 申请资源
- 2.ResourceManager返回一个任务的id,客户端把id,配置信息,jar包,上传到hdfs中,
- 3.ResourceManager 会跟其中的一个nodamanager进行通信,让nodamanager启动一个z最初的管理容器AppMaster,
- 4.在AppMaster里面起Driver,Driver会跟ResourceManager进行通信,向他申请容器,ResourceManager会把这个容器的信息传给AppMaster,AppMaster拿到容器信息,会跟对应的NodeManager进行通信,NodeManager启动子进程,子进程叫做YarnClusterEntryPoint,
- 这些YARN启动进程之后呢,会想Driver进行反向注册,Driver执行一些逻辑程序形成多个Task,然后把这些Task调度到Executor里面,
四.Spark任务的流程执行简介
- Job:RDD每一个行动操作都会生成一个或者多个调度阶段 调度阶段(Stage):每个Job都会根据依赖关系,以Shuffle过程作为划分,分为Shuffle Map Stage和Result Stage。每个Stage对应一个TaskSet,一个Task中包含多Task,TaskSet的数量与该阶段最后一个RDD的分区数相同。
- Task:分发到Executor上的工作任务,是Spark的最小执行单元
- DAGScheduler:DAGScheduler是将DAG根据宽依赖将切分Stage,负责划分调度阶段并Stage转成TaskSet提交给TaskScheduler
- TaskScheduler:TaskScheduler是将Task调度到Worker下的Exexcutor进程,然后丢入到Executor的线程池的中进行执行