RDD简介

RDD:弹性分布式数据集(Resilient Distributed Dataset,简称 RDD)。RDD 其实就是分布式的元素集合----Spark最根本的数据抽象。

Spark 中,对数据的所有操作不外乎创建 RDD转化已有 RDD 以及调用 RDD 操作进行求值。而在这一切背后,Spark 会自动将RDD 中的数据分发到集群上,并将操作并行化执行。

 RDD的五个属性:

(1)一组分片(Partition),即数据集的基本组成单位(RDD是由一系列的partition组成的)。对于RDD来说每个分区都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么会采用默认值。默认值就是程序所分配到CPU Core的数目。下图描述了分区存储的计算模型,每个分片的存储是由BlockManager实现的。每个分区都会被逻辑映射成BlockManager的一个Block,而这个Block会被一个Task负责计算。

 

(2)一个计算每个分区的函数Spark中的RDD计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每一次计算的结果。

(3)RDD之间的依赖关系RDD每次转换都会形成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失的时,Spark通过这种依赖关系重新计算丢失的分区数据,而不是对RDD所有分区进行重新计算。

(4)Partitioner(分区器)作用在K,V格式的RDD。当前Spark实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于key-valueRDD,才会有Partitioner,非key-valueRDDPartitioner的值是NonePartitioner函数不但决定了RDD的分片数量,也决定了parentRDD Shuffle输出时的分片数量。

(5)RDD提供一系列最佳的计算位置preferred location)。对于一个HDFS文件来说,这个列表保存的就是每个Partition所在块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,尽可能的把计算任务分配到其所要处理数据块的存储位置(数据本地化)。

 问题一:什么是K,V格式的RDD?

如果RDD里面存储的数据都是二元组(Tuple2)对象,那么这个RDD我们就叫做K,V格式的RDD

问题二:哪里体现RDD的弹性(容错)?

partition数量,大小没有限制,体现了RDD的弹性。

RDD之间依赖关系,可以基于上一个RDD重新计算出RDD

问题三:哪里体现RDD的分布式?

RDD是由Partition组成,partition是分布在不同节点上的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值