Spark job划分和参数设置
一、Spark的job划分
1.RDD
弹性分布式数据集(RDD)是不可变Java虚拟机(JVM)对象的分布式集合,该数据集是分布式的,数据集被划分成块,分布在多个执行器节点上。
RDD有两组并行操作,转换(返回指向新RDD的指针)和动作(在运行计算后向驱动程序返回值)。RDD转换操作是惰性的,不会立即计算结果,只有动作执行了并且需要将结果返回给驱动程序时,才会计算转换。
2.窄依赖和宽依赖
- 窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用。
- 宽依赖是指父RDD的每个分区都可能被多个子RDD分区所使用。
判断窄依赖和宽依赖牢记只需要根据:
父RDD中分区内的数据,在子类RDD中是否也完全处于一个分区,如果是就是窄依赖,如果不是就是宽依赖。
窄依赖和宽依赖如下图所示:
左边为窄依赖,左边的一个子RDD虽然继承了两个父RDD分区,但是两个父RDD分区的数据全部在一个子RDD分区中。
右边为宽依赖,父RDD分区中的数据被多个子RDD分区继承,因此是宽依赖。
相比于宽依赖,窄依赖对优化很有利 ,主要基于以下两点:
宽依赖往往对应着shuffle操作,需要在运行过程中将同一个父RDD的分区传入到不同