美文网首页
Job、Stage、Task划分过程

Job、Stage、Task划分过程

作者: ryancao_b9b9 | 来源:发表于2020-05-04 15:37 被阅读0次

    一、关系概览


    元素关系图.png

    二、Job/Stage/Task关系
    一个Spark程序可以被划分为一个或多个Job,划分的依据是RDD的Action算子,每遇到一个RDD的Action操作就生成一个新的Job。
    每个spark Job在具体执行过程中因为shuffle的存在,需要将其划分为一个或多个可以并行计算的stage,划分的依据是RDD间的Dependency关系,当遇到Wide Dependency时因需要进行shuffle操作,这涉及到了不同Partition之间进行数据合并,故以此为界划分不同的Stage。
    Stage是由Task组组成的并行计算,因此每个stage中可能存在多个Task,这些Task执行相同的程序逻辑,只是它们操作的数据不同。
    一般RDD的一个Partition对应一个Task,Task可以分为ResultTask和ShuffleMapTask。
    补充说明:
    多个Stage可以并行(S1/S2),除非Stage之间存在依赖关系(S3依赖S1+S2)。


    经典任务.png

    三、RDD/Partition/Records/Task关系
    通常一个RDD被划分为一个或多个Partition,Partition是Spark进行数据处理的基本单位,一般来说一个Partition对应一个Task,而一个Partition中通常包含数据集中的多条记录(Record)。
    注意不同Partition中包含的记录数可能不同。Partition的数目可以在创建RDD时指定,也可以通过reparation和coalesce等算子重新进行划分。
    通常在进行shuffle的时候也会重新进行分区,这是对于key-valueRDD,Spark通常根据RDD中的Partitioner来进行分区,目前Spark中实现的Partitioner有两种:HashPartitioner和RangePartitioner,当然也可以实现自定义的Partitioner,只需要继承抽象类Partitioner并实现numPartitions and getPartition(key: Any)即可。

    四、运行层次图


    运行层次.png

    相关文章

      网友评论

          本文标题:Job、Stage、Task划分过程

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