spark的任务调度流程(三)

spark任务调度
1、提交spark应用,每一个saprk的应用叫做application;
2、./bin/spark-submit 提交代码,启动driver;
3、启动driver也就意味着开始要执行代码,执行代码的时候初始化sparkContext,即构建DAGScheduler和TaskScheduler;
4、TaskScheduler向master注册,master接到请求之后,向worker申请Executor,接着worker为aplication启动多个Executor ;
5、Driver把Application信息注册给Master后Master会根据Application信息去Worker节点启动Executor;
6、executor启动完成以后,executor会反向driver去注册,然后driver就知道那些executor为这个application任务服务了,到这儿SparkContext完成了初始化操作,然后代码的执行能够每执行一个action操作,就会创建一个job任务,job任务提交给DAGScheduler,DAGScheduler会将job拆分成多个stage,每个stage创建以TaskSet集合;
7、DAGScheduler负责把spark作业转换成Stage的DAG[有向无环图],根据宽窄依赖切分Satge,然后把Stage封装成TaskSet的形式发送TaskScheduler,同时DAGScheduler还会处里由于shuffle数据跌势导致的失败;
8、TaskScheduler会把TaskSet里面每个task都市提交给executor去执行,【维护所有TaskSet,分发Task给各个节点的Executor,监控task的运行状态,负责重试失败的task】executor每收到一个Task,都会启动taskrunner去封装task,然后从线程池里取出一个线程来执行task:shuffleMaptask or ResultTask,最后一个stage里面都是reultTask,其余都是shuffleMapTask【task时针对里面的每一个partition执行我们定义好的算子操作;
9、所有task运行完成后,SparkContext向Master注释,释放资源;
spark关键术语:
master节点:常驻master进程,负责管理全部worker节点;
worker节点:常驻worker进程,负责管理executor并与master节点通信;
driver:用户自己编写的应用程序;
executor:每个工作节点上为应用启动的一个进程,该进程负责运行任务,并且将数据存在内存和磁盘上,每个job各自有独立的execcutor,主要职责:1、初始化程序要执行的上下问sparkEnv,解决应用程序需要运行的jar包的依赖、加载类2、汇报当前任务的状态【监控和执行器】;
job:多个task的并行计算,时RDD里面的action,每个action算子的执行会生成一个job,job->DAGScheduler->task/stage/;
stage:一个job会被拆分成多个task,每组任务被分为一个stage,stage分为shuffle和result如果多个job中有多次shuffle,每个shuffle之前都是一个stage,shuffle的算子有distict/reduceByKey/groupByKey/sortByKey/表关联join/重分区repartition or coalexce,增加分区提高并行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值