Rdd是弹性分布式数据集,是spark中最基本的计算(逻辑)抽象,它代表一个不可变,可分区,里面的元素可并行计算的集合
1.Rdd弹性
1)存储的弹性:自动进行内存和磁盘数据存储的切换
spark优先把数据放到内存中,如果内存放不下,就会放到磁盘中
2)自动切换容错的弹性:基于血统的高容错机制
在Rdd进行转换的时候,会形成rdd依赖链,(即创建第二个rdd时需要使用第一个rdd作为参数,第二个rdd又作为第三个rdd的参数),每个rdd都会保存上下级依赖关系,当某一个rdd失效的时候,可由其他健在的rdd继续执行,不会造成整个任务原地去世
3)Task如果失败会自动进行特定次数的重试
rdd的计算任务如果挂了,会自动尝试复活,默认尝试次数为4次,如果还没活过来,就彻底凉了
4)stage如果失败会自动进行特定次数的重试
如果Job的某个Stage阶段计算失败,框架也会自动进行任务的重新计算,默认次数也是4次。
5) Checkpoint和Persist可主动或被动触发
RDD可以通过Persist持久化将RDD缓存到内存或者磁盘,当再次用到该RDD时直接读取就行。也可以将RDD进行检查点,检查点会将数据存储在HDFS中,该RDD的所有父RDD依赖都会被移除。
6) 数据调度弹性
Spark把这个JOB执行模型抽象为通用的有向无环图DAG,可以将多Stage的任务串联或并行执行,调度引擎自动处理Stage的失败以及Task的失败。
7) 数据分片的高度弹性
可以根据业务的特征,动态调整数据分片的个数,提升整体的应用执行效率。
总结: 存储的弹性:内存与磁盘的
自动切换容错的弹性:数据丢失可以
自动恢复计算的弹性:计算出错重试机制
分片的弹性:根据需要重新分片
2.不可变
源数据不会被修改,如果要改变,会重新创建一个,保证源数据不丢失
3.可分区
使用分区,不同分区可并行计算,提高效率,每个分区发给一个executor