《spark内核 架构设计与实现原理》 读书笔记2-----RDD

0 数据容错机制: 1)数据检查点  2)记录数据更新, RDD使用的lineage是记录数据更新

1 rdd是什么:

    1.1 rdd的构成:rdd是只读的分布式的存储在worker上的数据集合, 比如 JavaRDD<String> record; 是从hdfs上创建出来的用户行为信息,一个条记录是一个String,比如用户数量是10M,理论上record.count()就是  10M.一个RDD会被划分为若干个分片,比如均匀划分为10个分片,那么一个分片包含的数据就是1M条String,默认的分片数量是worker集群中core的数量,例如我们有250台worker, 每个worker都是4 core, 那么就是1000个分片, 一个分片包含1W条记录。分片是一个逻辑概念partition, 物理上会被映射为一个block,一个block会被视作一个task。分片的划分有两种,一种是HashPartitioner 一种是RangePartitioner, spark2.0后默认就是rangePartiotioner。rdd之间存在依赖关系,如上图所示就是wordcount的rdd依赖流水线, HadoopRDD->MapPartitionRDD->ShuffledRDD-> MapPartitionRDD, 从上图可以看到在shuffle之前,每个分片之间是一一对应的,比如<c,c>-><(c,1),(c,1)>-><(c,2)>, 如果一个分片丢失了,并不需要重新计算所有的rdd,而是可以只计算失效的partition。但是在有shuffle的步骤,一个分片可能依赖多个来自上一个rdd的分片,做一次缓存对于提升性能有很大的帮助。

   1.2 转换与动作:

       1) 转换:map,filter, flatMap, mapPartition, sample,union, distinct, groupByKey, reduceByKey, sortByKey, join, cogroup,cartesian

       2)动作:reduce, collect, count,first, take,save

       3)RDD 转换之后依然是RDD,也就是依然分布式的存储在worker上,但是经过动作之后数据将返回到master上,master的内存是有限的,如果worker内存不足可以通过增加机器完成。转换是懒惰的 这是函数编程的三个主要特性之一, 这样有助与提升性能,当分析出运行图之后,根据action所需要的数据进行前面的数据转换操作。

       4)缓存:spark速度快的一个主要原因就是有缓存,一个已经计算出来的rdd并不需要重新计算,rdd1=rdd0.map,   rdd2=rdd1.mapPair,  rdd3=rdd1.filter, 当执行某个action进行倒推的时候,rdd1会被缓存下来,因为rdd1会被后续的rdd使用两次 

2 rdd => DAG:窄依赖和宽依赖,如果一个rdd中的分片对上一个rdd中分片的依赖只是一个分片,那么就是窄依赖,否则为宽依赖,注意分片要在同一个rdd中

扫描二维码关注公众号,回复: 2380445 查看本文章

3 rdd的计算过程:

4 rdd的容错机制:

猜你喜欢

转载自www.cnblogs.com/jiasenhuo/p/9369290.html