• 【Spark工作原理】Spark任务调度理解


    Spark内部有若干术语(Executor、JobStage、Task、Driver、DAG等),需要理解并搞清其内部关系,因为这是性能调优的基石。

     

    节点类型有:

    1. Master 节点: 常驻master进程,负责管理全部worker节点。

    2. Worker 节点: 常驻worker进程,负责管理executor 并与master节点通信。

    Dirvier:官方解释为: The process running the main() function of the application and creating the SparkContext。即理解为用户自己编写的应用程序

    Executor:执行器:

      在每个Worker节点上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上,每个job都有各自独立的Executor

      Executor是一个执行Task的容器。它的主要职责是:

      1、初始化程序要执行的上下文SparkEnv,解决应用程序需要运行时的jar包的依赖,加载类。

      2、同时还有一个ExecutorBackend向cluster manager汇报当前的任务状态,有点类似hadoop的tasktracker和task。

      也就是说,Executor是一个应用程序运行的监控和执行容器。Executor的数目可以在submit时,由 --num-executors (on yarn)指定.

    Job:  

      包含很多task的并行计算,可以认为是Spark RDD 里面的action,每个action算子的执行会生成一个job。

      用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task。

    Stage:  

      一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage

      Stage的划分简单来说是以shuffle和result这两种类型来划分。

      在Spark中有两类task,一类是shuffleMapTask,一类是resultTask。第一类task的输出是shuffle所需数据,第二类task的输出是result,stage的划分也以此为依据:shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage。例如:

      1) rdd.parallize(1 to 10).foreach(println) 这个操作没有shuffle,直接就输出了,那么只有它的task是resultTask,stage也只有一个;

      2) 如果是rdd.map(x => (x, 1)).reduceByKey(_ + _).foreach(println), 这个job因为有reduce,所以有一个shuffle过程,那么reduceByKey之前的是一个stage,执行shuffleMapTask,输出shuffle所需的数据,reduceByKey到最后是一个stage,直接就输出结果了。

      如果job中有多次shuffle,那么每个shuffle之前都是一个stage。

      spark中会引起shuffle的算子有:

      去重distinct、聚合reduceByKey/groupByKey/xxByKey、排序sortByKey、表关联join、重分区Repartition/Coalesce(shuffle=true)等。

    Task:

      stage 下的单个任务执行单元。

      一个rdd有多少个partition,就会有多少个task,因为每一个 task 只是处理一个partition上的数据。所以有时为提高执行并行度,使用Repartition或Coalesce(shuffle=true),增多partition数量,从而增多task数量

  • 相关阅读:
    Redis 常用操作
    Redis持久化功能
    Redis 和 memcache 简单比较
    你不知道的 JavaScript 系列中( 1 ) - 内置类型
    你不知道的 JavaScript 系列上( 57 ) - 类和委托思维模型的区别
    你不知道的 JavaScript 系列上( 56) - 委托行为
    你不知道的 JavaScript 系列上( 55) - Object.create()
    你不知道的 JavaScript 系列上( 54) - 检查 [[Prototype]]
    你不知道的 JavaScript 系列上( 53 ) - 原型继承
    你不知道的 JavaScript 系列上( 52 ) - .constructor
  • 原文地址:https://www.cnblogs.com/wwcom123/p/10480010.html
Copyright © 2020-2023  润新知