Spark RDD特点

RDD: resilient distributed dataset
弹性分布式数据集
*就是一个数据集合
*分布式的: rdd执行并行计算
*弹性:通过算子可以完成对RDD的转换处理

RDD的特点
1.不可变: RDD一旦生成,就不会再改变;根据需要可以做转换生成新的RDD
2分区: RDD是并行计算。rdd本身自带的有分区

计算的时候会通过一个compute函数得到每个分区的数据。如果RDD是通过已有的文件系统构建,则compute函数是读取指定文件系统中的数据,如果RDD是通过其他RDD转换而来,则compute函数是执行转换逻辑将其他RDD的数据进行转换。

3依赖关系:一个RDD是通过另外一个RDD转换过来的,我们就说这两个RDD有依赖关系
用现实生活的话来说,就是父子关系。父RDD通过转换,生成了子RDD。

RDD依赖关系也称为RDD的血统,描述了RDD间的转换关系 。
Spark将RDD间依赖关系分为了宽依赖|ShuffleDependency、窄依赖|NarrowDependency,
Spark在提交任务的时候会根据转换算子逆向推导出所有的Stage。
然后计算推导的stage的分区用于表示该Stage执行的并行度。

窄依赖:
- 父RDD和子RDD partition之间的关系是一对一的。
或者父RDD一个partition只对应一个子RDD的partition情况下的
父RDD和子RDD partition关系是多对一的。不会有shuffle的产生。
父RDD的一个分区去到子RDD的一个分区。
- 可以理解为独生子女


宽依赖:

- 父RDD与子RDD partition之间的关系是一对多。会有shuffle的产生。
父RDD的一个分区的数据去到子RDD的不同分区里面。
- 可以理解为超生

4缓存:可以把RDD进行缓存下来

RDD通过persist方法或cache方法可以将前面的计算结果缓存,
默认情况下 persist() 会把数据缓存在 JVM 的堆空间中。 

但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,
该RDD将会被缓存在计算节点的内存中,并供后面重用。

cache()的底层调用了persist(),所以两者一样

5.持久化:永久保存起来,借助于checkpoint完成持久化

Spark中对于数据的保存除了持久化操作之外,还提供了一种检查点的机制,检查点(本质是通过将RDD写入Disk做检查点)是为了通过lineage做容错的辅助,lineage过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果之后有节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销。检查点通过将数据写入到HDFS文件系统实现了RDD的检查点功能。为当前RDD设置检查点。该函数将会创建一个二进制的文件,并存储到checkpoint目录中,该目录是用SparkContext.setCheckpointDir()设置的。在checkpoint的过程中,该RDD的所有依赖于父RDD中的信息将全部被移除。对RDD进行checkpoint操作并不会马上被执行,必须执行Action操作才能触发

Spark RDD特点_第1张图片

你可能感兴趣的:(Spark面试,大数据,spark)