zoukankan      html  css  js  c++  java
  • Spark调度模块

    概述

       

    之前我们提到:Driver 的sc负责和Executor交互,完成任务的分配和调度,在底层,任务调度模块主要包含两大部分:

    1)DAGScheduler

    2)TaskScheduler

    它们负责将用户提交的计算任务按照DAG划分为不同的阶段并且将不同阶段的计算任务提交到集群进行最终的计算。整个过程可以使用下图表示

       

       

    RDD Objects可以理解为用户实际代码中创建的RDD,这些代码逻辑上组成了一个DAG。

       

    DAGScheduler主要负责分析依赖关系,然后将DAG划分为不同的Stage(阶段),其中每个Stage由可以并发执行的一组Task构成,这些Task的执行逻辑完全相同,只是作用于不同的数据。

       

    在DAGScheduler将这组Task划分完成后,会将这组Task提交到TaskScheduler。TaskScheduler通过Cluster Manager 申请计算资源,比如在集群中的某个Worker Node上启动专属的Executor,并分配CPU、内存等资源。接下来,就是在Executor中运行Task任务,如果缓存中没有计算结果,那么就需要开始计算,同时,计算的结果会回传到Driver或者保存在本地。

       

       

    Scheduler的实现概述

    任务调度模块涉及的最重要的三个类是:

    1)org.apache.spark.scheduler.DAGScheduler 前面提到的DAGScheduler的实现。

    将一个DAG划分为一个一个的Stage阶段(每个Stage是一组Task的集合)

    然后把Task Set 交给TaskScheduler模块。

    2)org.apache.spark.scheduler.TaskScheduler

    它的作用是为创建它的SparkContext调度任务,即从DAGScheduler接收不同Stage的任务。向Cluster Manager 申请资源。然后Cluster Manager收到资源请求之后,在Worker为其启动进程

    3)org.apache.spark.scheduler.SchedulerBackend

    是一个trait,作用是分配当前可用的资源,具体就是向当前等待分配计算资源的Task分配计算资源(即Executor),并且在分配的Executor上启动Task,完成计算的调度过程。

    4)AKKA是一个网络通信框架,类似于Netty,此框架在Spark1.8之后已全部替换成Netty

       

    任务调度流程图

       

       

  • 相关阅读:
    老年人微信教程手绘版|微信入门教程1
    微信网页版朋友圈在哪?怎么找不到
    如何用<dl>标签做表格而不用table标签
    600万个!520元的微信红包发了这么多!
    微信红包最高能发520元啦!只限今天!
    微信和WeChat的合并月活跃账户数达到7.62亿了
    excel隔行选中内容如何操作
    各大公司广泛使用的在线学习算法FTRL详解
    在线最优化求解(Online Optimization)之五:FTRL
    在线最优化求解(Online Optimization)之四:RDA
  • 原文地址:https://www.cnblogs.com/shuzhiwei/p/11077292.html
Copyright © 2011-2022 走看看