zoukankan      html  css  js  c++  java
  • Spark任务流程笔记

    Spark学习笔记总结

    02. Spark任务流程

    1. RDD的依赖关系

    RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)

    • 窄依赖
      窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用
      总结:窄依赖我们形象的比喻为独生子女
    • 宽依赖
      宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition

    总结:窄依赖我们形象的比喻为超生(多个子女)
    查看RDD依赖关系:
    整个树形结构:rdd.toDebugString
    本身:rdd.dependencies

    2. DAG的生成

    DAG,有向无环图,原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage,对于窄依赖,partition的转换处理在Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。

    3. Spark任务执行流程

    大致分为4步:

    1. 根据算子生成DAG
    2. 将DAG根据宽依赖切分成任务集合的stages
    3. Driver将具体任务分发给Worker
    4. Worker中的executor执行任务
    5. DAGScheduler和TaskScheduler都在Driver中

    4. wordcount执行流程

    1. wc示例代码
    //textFile会产生两个RDD: 1. HadoopRDD -> MapPartitionsRDD
    sc.textFile(INPUT_PATH)
      //flatMap产生1个RDD:MapPartitionsRDD
      .flatMap { _.split(" ") }
      //map产生1个RDD:MapPartitionsRDD
      .map { (_, 1) }
      //reduceByKey产生了:ShuffledRDD
      .reduceByKey(_ + _)
      //暂时不管
      .sortBy(_._2, false)
      //saveAsTextFile产生1个RDD:MapPartitionsRDD
      .saveAsTextFile(OUTPUT_PATH)

    一共产生了6个RDD

    2. 执行流程-切分stage

    执行流程:

    1. 根据宽依赖划分成了两个stage,后面一个stage需要等待前一个计算完成
    2. 第一个stage中的taskSet包含了3个task
    3. 一个task就是一个流水线pipelining,可以与其他task并行执行,在这里,任务内容是相同的,只是数据不同。

    初接触,记下学习笔记,还有很多问题,望指导,谢谢。

  • 相关阅读:
    用Eclipse做J2Me开发的前期配置
    cglib和asm相关的文章
    bcp命令详解
    Oracle/PLSQL AFTER DELETE Trigger
    Mybatis(九)分页插件PageHelper使用
    Mybatis(八)逆向工程
    Mybatis(四)关联映射
    Mybatis(三)返回值四.注解配置
    Mybatis(二)参数(Parameters)传递
    Mybatis(一)实现单表的增删改查
  • 原文地址:https://www.cnblogs.com/yulei126/p/6777292.html
Copyright © 2011-2022 走看看