当启动完spark-submit之后:
进入资源调度
①首先worker会向Master汇报资源
②Master掌握了集群资源
③创建SparkContext,Driver端启动,生成DAGScheduler和TaskScheduler
④TaskScheduler向Master申请资源
⑤Master收到请求之后,会找到满足资源的worker节点启动Executor
⑥Executor反向注册到Driver,Driver掌握一批计算资源
进入任务调度
⑦有几个action算子就会有几个job,我们已经有job了
⑧DAGScheduler拿到DAG,按照RDD的宽依赖将job切分成一个个的stage,将stage以TaskSet的方式提交给TaskScheduler
⑨TaskScheduler遍历TaskSet,拿到一个个Task,发送到worker节点的Executor中执行
⑩发送task到Executor中
最后:Driver端监控task,并回收结果
粗粒度资源申请:Spark
application在启动之前首先将所有的资源申请完毕,如果申请不到一直处于等待状态,一直到申请到为止。必须一次申请完毕之后才会执行任务,这样task在执行的时候就不用自己申请资源,加快了task效率,task快了,job就快了,job快了,application就快了。必须是最后一个task执行完毕之后,才会释放所有资源。
优点:执行速度快
缺点:容易造成资源不能充分利用
细粒度资源申请:MapReduce
application在启动之前不会将所有task资源申请完,task执行时自己申请资源释放资源,这样task执行相对较慢,但是集群资源可以充分利用。
优点:集群资源可以充分利用
缺点:application执行相对较慢