DAG-有向无环图

DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的Transformation转换就形成了DAG。在spark中,RDD与RDD之间的转换关系称之为血缘;根据不同的Transformation算子,可以将血缘分为两类,窄依赖和宽依赖。

DAG是有边界的:开始(通过SparkContext创建的RDD),结束(触发Action,调用run Job就是一个完整的DAG就形成了,一旦触发Action就形成了一个完整的DAG),所以,一个DAG由一个或多个RDD组成。

RDD在进行Transformation算子转换(即父RDD生成子RDD的过程),如果不手动改变子RDD的分区数量,新生成的子RDD的分区个数会与父RDD的分区数量保持一致。所以,当子RDD的各个分区的数据都来源于父RDD的一个分区(即:子RDD的一个分区数据只依赖父RDD的一个分区)时,这种血缘关系,称之为窄依赖;当子RDD的一个分区的数据来源于多个父RDD(这些父RDD的数据全部传递到一个分区)时,此时的血缘关系任然是窄依赖。这种窄依赖的事例:两个RDD先进行"groupByKey"操作,在进行"join"操作,并且在这些操作过程中,没有改变新生产的RDD的分区个数与分区器时,这样的"join"操作就是一个窄依赖操作,其他的"join"操作都是宽依赖。

当父RDD的一个分区的数据传递给子RDD(此过程为Shuffle)的多个分区(即:子RDD的多个分区依赖父RDD的一个分区)时,这种血缘关系,称之为宽依赖。在宽依赖处会发生Shuffle,他是切分Stage(调度阶段)的依据;在Shuffle前,会将数据写入到磁盘中,以方便子RDD各个分区来拉取。

宽依赖与窄依赖

DAG-有向无环图_第1张图片

你可能感兴趣的:(大数据)