目录
调度流程
1.源码打成jar包,放到集群上
2.提交Application,客户端会生成一个Driver进程。
spark-submit --master --class jarPath
3.当TaskScheduler对象创建成功后,会向Master为Application申请资源
4.当Master中的waitingApps集合中的元素发生改变会调用schedule()
5.当Executor启动成功后,会向Task Scheduler反向注册,此时的Task Scheduler就有一批Executor的列表信息
6.Driver进程中的DAGScheduler会根据RDD的宽窄依赖,切割job,划分stage,每一个stage都是由一组task组成的,每一个task是一个pipeline的计算模式。
7.Driver进程中的TaskScheduler会根据数据的位置(通过调用HDFS的API,拿到数据的block块以及位置)来分发task
8.Driver进程中的TaskScheduler分发task并且监控task的执行情况
9.如果task失败或者挣扎,Driver进程中的TaskScheduler会重试
10.如果task失败次数达到规定次数后,Driver进程中的DAGScheduler会重试stage(只会重试失败的task)
11.任务完成,Driver进程会告诉Master将集群中的Executor kill掉,释放资源。