spark的任务调度
- Driver会运行客户端main方法中的代码,代码就会构建SparkContext对象,在构建SparkContext对象中,会创建DAGScheduler和TaskScheduler,然后按照rdd一系列的操作生成DAG有向无环图。最后把DAG有向无环图提交给DAGScheduler
- DAGScheduler拿到DAG有向无环图后,按照宽依赖进行stage的划分,这个时候会产生很多个stage,每一个stage中都有很多可以并行运行的task,把每一个stage中这些task封装在一个taskSet集合中,最后提交给TaskScheduler
- TaskScheduler拿到taskSet集合后,依次遍历每一个task,最后提交给worker节点的exectuor进程中。task就以线程的方式运行在worker节点的executor进程中。
standalone模式
- 使用sparksubmit提交任务,Driver运行在Client上
- 使用本地的Client类的main函数创建sparkcontext并初始化它
- sparkcontext连接到Master,注册并申请资源
- master根据sc提出的申请,根据worker的心跳报告,来决定在哪个worker上启动executor
- executor向sc注册,sc将应用分配给executor
- sc解析应用,创建DAG图,提交给DAGScheduler进行分解成stage,