1. RDD基础
1.1 为什么要有RDD
迭代式算法和交互式数据挖掘中存,不同计算阶 段之间会重用中间结果,为了减少中间结果写磁盘带来的数据复制、磁盘IO和序列化开销,spark提供了一个抽象的数据模型——RDD。
通过RDD只需将具体的应用逻辑表达为一系列转换操作(函数),不同 RDD 之间的转换操作之 间还可以形成依赖关系,进而实现pipeline,减少了中间结果的存储,大大降 低了数据复制、磁盘 IO 和序列化开销,并且还提供了更多的 API(map/reduec/filter/groupBy...)。
1.2 RDD是什么
- Resilient :弹性的,RDD 里面的中的数据可以保存在内存中或者磁盘里面;
- Distributed :它里面的元素是分布式存储的,可以用于分布式计算;
- Dataset: 一个集合,可以存放很多元素(而不是数据)。
1.1.3 RDD主要属性
1、a list of partitions:一组分片(Partition)/一个分区(Partition) 列表,即数据集的基本组成单位。 对。
2、a function of computing each split:作用在每一个 分区 的函数。Spark 中 RDD 的计算是以分片为单位的,compute 函数会被作用 到每个分区上。
3、A list of dependencies on other RDDs :一个 RDD 会依赖于其他多 个 RDD。 数据丢失时,基于此依赖可以恢复数据。
4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned): 可选, KV 类型的 RDD 会有一个 Partitioner,即 RDD 的分区函数,默认为 HashPartitioner。
5、Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file): 可选项,一个列表,存储 存取每个 Partition 的优先位置(preferred location)。 移动数据不如移动计算,Spark 在进行任务调度的时候,会 尽可能选择那些存有数据的 worker 节点来进行任务计算。
2. RDD算子
3. RDD持久化/缓存
4. RDD容错机制Checkpoint
SparkContext.setCheckpointDir("目录") //HDFS 的目录
RDD.checkpoint