spark认知理解(一)RDD与DAG

目录

1. spark介绍

2. RDD理解

2.1 RDD概念

2.2 Partition分片

2.3 Partitioner

3. 宽窄依赖

4. stage划分

4. spark与DAG

注脚


1. spark介绍

spark是基于内存计算的大数据并行计算框架。
特性:DAG执行引擎,可分布式,基于内存计算。

2. RDD理解

RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。

2.1 RDD概念

RDD是spark中最基本的数据单元,它代表一个不可变、可分区、内部元素可并行计算的抽象数据集合。RDD由一组分片(Partition)组成。

2.2 Partition分片

Partition(分片):是RDD的基本组成单位,也是spark中参与计算的最基本的单元。正是由于RDD的分片属性,才保证了spark的可分布式计算能力。

2.3 Partitioner

当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。分片是nosql中的概念,就是对大数据集依据key进行切分并形成小块,然后进行存储。

3. 宽窄依赖

不同的RDD算子之间的依赖关系可分为:宽依赖(shuffle dependency)和窄依赖(narrow dependency)。

  • 窄依赖:一对一关系。从一个RDD分区只流向一个RDD分区(如:map/filter等操作);
  • 宽依赖:一对多关系。从一个RDD分区出发流向多个RDD分区(如:groupByKey、reduceByKey等操作);

4. stage划分

spark根据RDD的宽窄依赖关系将DAG划分为不同的stage,从而将task任务分配到不同的物理计算节点上,进而达到计算效率的优化。换句话说,spark的DAG计算就相当于相互关联的stage进行计算,stage相当于DAG中的一个顶点,因为一个stage也会形成一个RDD。
关键:由于窄依赖之间关系是一对一的,因此,可将连续窄依赖划分为一个的stage;而宽依赖的计算需要等到所有父节点计算完成后才可进行,因此,宽依赖直接划分为一个stage。

划分思路:在DAG中,从后向前开始划分,遇到宽依赖就切开,划分成不同的stage;遇到窄依赖,则保留并合并为一个stage。

4. spark与DAG

RDD是spark中最基本的数据单元,各个RDD之间通过不同RDD算子,连接形成了DAG(有向无环图),并依据RDD的宽窄依赖关系将DAG划分为不同的stage,使得spark更加高效的调度及计算。
个人理解:在spark中,DAG中的顶点就相当于stage,关系就相当于宽依赖算子。

spark任务划分底层逻辑:spark认知理解(一)RDD与DAG_第1张图片

注脚


若有错误,请指正交流。
不积跬步,无以至千里。–zlg358 2019/7/2


 

你可能感兴趣的:(spark)