美文网首页
Spark任务提交过程

Spark任务提交过程

作者: aaron1993 | 来源:发表于2017-12-15 20:02 被阅读0次

1. 前言

本文主要讲述一下我对spark任务调度过程的理解,必要的地方会配合源码。

2 . Spark任务调度

2.1 基本概念

  1. Job
    用户提交的spark应用程序中任何一个action操作(foreach,count...)都对应一个job的提交(提交job动作对应到源码SparkContext #runJob方),因此一个用户spark应用程序往往对应一到多个job。比如下面的例子:
    def main(args:Array[String]){
     val sparkConf = new SparkConf().setAppName("Log Query")
     val sc = new SparkContext(sparkConf)
     val lines = sc.textFile("README.md",3)
     val words = lines.flatMap(line => line.split(" "))
     val wordOne = words.map(word => (word,1))
     val wordCount = wordOne.reduceByKey(_ + _,3)
      // foreach是一个action,对应一个job
     wordCount.foreach(println)
      // collect是一个action,对应一个job
     val resultAsArry = wordCount.collect() }
    
  2. Stage
    Job提交之后,首先会被划分为一到多个Stage,划分Stage的原因在于一个job中有些操作(Transformation)是可以连在一起在同一个线程里执行的,这些连在一起的操作就像一根管道一样,数据从顺着管道流下去就行(比如.map.filter就可以连在一起),可是有些操作(shuffle操作,reduce,group等)会导致管道出现分支,数据不得不分流到不同管道,Stage的划分就以这中会导致分流(shuffle)的操作为分割,划分成不同的Stage,显然划分会导致Stage的依赖,上游Stage必须运行完,才能让下游Stage运行。Stage和Job一样是一种静态的东西,一个Stage里包含没有Shuffle依赖(也就是没有分流)的一连串RDD。真正提交运行的是Task。
  3. Task
    Task是依据Stage建立起来的,上面说Stage包含了一连串RDD,RDD是一种数据的抽象描述,对应物理数据是包含了n个分区数据的。每一个Task就处理一个分区数据,一个包含了n个分区的Stage就会创建出n个Task,只有这n个Task都执行成功了,这个Stage才算成功,然后才可以执行下游的Stage。
  4. TaskSet
    TaskSet是task的集合,包含了同一个Stage中的部分或者全部task,每次提交的是TaskSet,然后根据TaskSet创建TaskSetManager,spark中TaskSetManager是任务调度器一个调度单元,当一个TaskSetManager被调度器调度到时,就会从TaskSetManager中拿若干个task去执行。task会失败重试,重试的那些task又会组成一个新的TaskSetManager去让调度器调度,因此,一个正在运行的Stage可能会有多个TaskSetManager正在等待调度。
  5. TaskSchedulerImpl
    任务调度器,它按照一定的策略调度TaskSetManager,然后会从被调度到的TaskSetManager获取若干个task发送到Executor去执行。只要TaskSetManager中有task没有运行完,那么这个TaskSetManager还是会继续被调度。目前有两种调度策略:FIFO和Fair模式。
  6. CoarseGrainedSchedulerBackend
    运行在driver端,可以当作是Rpc的一个端点,从任务调度器获取任务并发送到Executor上执行(LaunchTask),以及接收Executor汇报的Task运行状态信息(StatusUpdate)
  7. CoarseGrainedExecutorBackend
    运行在Executor上,从CoarseGrainedSchedulerBackend上接收运行任务的请求(LaunchTask),任务运行结束后通过它向CoarseGrainedSchedulerBackend汇报任务状态(StatusUpdate).

整个过程大致如下图:


任务提交过程

相关文章

  • Spark任务提交过程

    1. 前言 本文主要讲述一下我对spark任务调度过程的理解,必要的地方会配合源码。 2 . Spark任务调度 ...

  • 大数据技术,Spark任务调度原理 四种集群部署模式介绍

    一、spark-submit任务提交机制 上面是spark在集群提交任务最常见的命令,其中: --class是程序...

  • spark任务提交

    好久时间没有用spark了,最近工作需要,在提交spark任务的时候发现打jar一直很大,自己又是搞C++的,以前...

  • Spark 任务提交

    提交的应用程序 Spark的bin目录中的Spark -submit脚本用于在集群上启动应用程序。它可以通过一个统...

  • Spark提交任务

    1. 代码 2. client模式 submit-client.sh 解释: 不指定模式默认是client模式 b...

  • Spark报错锦集

    1.提交Spark任务异常:spark.sql.AnalysisException: Table or view ...

  • Spark 内核机制(重要)

    Spark 内核机制 就是Driver中 Job怎样调度task任务的过程 提交流程: submit_client...

  • spark-submit 参数讲解

    spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行...

  • spark源码之任务提交过程

    感谢逃出你的肖生克文章指导。 一般在命令行我们会以spark-submit来提交自己的代码,并会以这个形式提交 ....

  • 脚本提交spark任务会自动重试

    1)如果spark任务执行成功,不会自动重试2)如果spark任务执行失败,手动提交时不会重试3)如果spark任...

网友评论

      本文标题:Spark任务提交过程

      本文链接:https://www.haomeiwen.com/subject/hpfdwxtx.html