SpaK-RDD学习总结

RDD-弹性分布式数据集(只读的数据分区)

RDD的七个优点

  1. 自动进行内存和磁盘数据存储的切换
  2. 基于Lineage(又称为RDD运算图或RDD依赖关系图,其实就是DAG)的高效容错
  3. Task如果失败会自动进行特定次数的重试
  4. Stage如果失败会自动进行特定次数重试
  5. checkpoint(摄入检查点,有容错的作用),persist(持久化)
  6. 数据分片的高度弹性(重新设置分片数:程序运行时会产生大量的分片,而每个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的创建方式:
  1. 基于spark应用程序创建(在程序里面创建)
  2. 基于本地文件系统创建
  3. 基于hdfs创建
  4. 基于DB、TCP创建
  5. 基于NoSQL(非关系型数据库-HBASE、Cassandra)创建
  6. 基于S3
  7. 基于数据流(socket数据流)
 

你可能感兴趣的:(spark)