RDD-弹性分布式数据集(只读的数据分区)
RDD的七个优点
- 自动进行内存和磁盘数据存储的切换
- 基于Lineage(又称为RDD运算图或RDD依赖关系图,其实就是DAG
)的高效容错 - Task如果失败会自动进行特定次数的重试
- Stage如果失败会自动进行特定次数重试
- checkpoint(摄入检查点,有容错的作用),persist(持久化)
- 数据分片的高度弹性(重新设置分片数:程序运行时会产生大量的分片,而每个partition会消耗一个线程去处理,分片过多的时候会很消耗时间,RDD可以支持重新分片;注:千万别用repartition,这个算子会产生shuffle(shuffle是分布式系统最耗时的操作),用coalesce)
RDD的高效性:RDD是Lazy级别的,没到Action操作的时候是Lazy操作的(不计算,做标记,等到Action操作的时候才从前往后回溯查找迭代的父RDD,然后再展开来计算),例如如下:
x=1+2
y=3+5
z=x+y
假设z=x+y才是Action操作时,前面的两步都不计算,到第三步直接将算式展开为:z=1+2+3+5,然后再计算(与Hadoop相比,这样可以节省大量的中间结果)。
注意:RDD是粗粒度的,即每次操作都是操作所有的数据集合(为了效率),RDD的写操作是粗粒度的、RDD的读操作可以粗粒度的也可以是细粒度的。
RDD内幕:看过源码的同学都知道,所有的RDD操作都是返回一个迭代器,根本就不是返回数据本身
。
。RDD缺点:不支持增量迭代更新,不支持细粒度更新。
RDD的创建方式:
- 基于spark应用程序创建(在程序里面创建)
- 基于本地文件系统创建
- 基于hdfs创建
- 基于DB、TCP创建
- 基于NoSQL(非关系型数据库-HBASE、Cassandra)创建
- 基于S3
- 基于数据流(socket数据流)

9475

被折叠的 条评论
为什么被折叠?



