spark任务的提交流程

主线程:

步骤1:
客户端向资源管理器master发送注册和申请资源的请求,master负责任务资源的分配,这是spark集群的老大
步骤2:
Master收到申请资源的请求后,向指定的worker节点发送请求,然后worker节点会开启对应的executor的进程
步骤3:
Executor进程会向driver发送注册请求,然后申请要计算的task
步骤4:
在driver的内部会执行一些操作,最终都会通过task scheduler提交task到executor进程里去运行

driver端内部的执行逻辑的具体的细节如下:

        第一步,客户端会运行客户端程序中的main()方法;

        第二步,在main()方法中,他会创建一个sparkcontext的上下文对象,该对象是所有spark程序的一个执行入口,在构建sparkcontext的上下文的内部,他也会构建两个对象,分别是DAGScheduler和TaskScheduler;

         第三步,因为在用户代码中,RDD算子会设计大量的转换操作,然后会通过一个动作(action)操作,触发任务的真正执行,在这里会按照RDD与RDD之间的依赖关系,首先会生成一个DAG的有向无环图,图的方向就是RDD算子的操作顺序,最终会将RDD DAG有向无环图发送给DAGScheduler对象;

          第四步,DAGScheduler在获取到DAG有向无环图之后,会按照宽依赖进行stage的划分,由于RDD算子中包括了大量的宽依赖,所以在划分出多个stage之后,每一个stage的内部有很多个可以并行运行的task线程,然后将这些并行运行的task线程封装在一个taskSet集合中,最后将多个taskSet的集合发送给taskScheduler对象;

            第五步,taskScheduler对象在获取这些TaskSet的集合之后,会按照多个stage之间的依赖关系,前面的stage的task先运行,后面的再运行,然后TaskScheduler对象一次遍历每一个TaskSet集合,获取每一个task,最后将每一个task提交到Worker节点的Executor进程运行


步骤5:
当所有的task任务在executor进程里面依次运行完成后,driver端会向master发送一个注销请求,
步骤6:
Master收到这个请求后,然后通过对应的worker节点关闭executor进程,最后worker节点上的计算资源就会得到释放

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值