您的位置:首页 > 其它

Spark之我看(I)什么是RDD

2017-02-09 17:14 253 查看
       一般来讲,对于陌生的名词,大家的第一个反应都是“What is it?”。

      RDD是Spark的核心内容,在Spark的官方文档中解释如下:RDD is a fault-tolerant collection of elements that can be operated on in parallel。由此可见,其中有两个关键词:fault-tolerant & in parallel。首先,容错性是RDD的一个重要特性;其次,它是并行计算的数据。

      RDD的中文解释为:弹性分布式数据集,全称Resilient Distributed Datasets,宾语是dataset,即内存中的数据库。RDD只读、可分区,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。所谓弹性,是指内存不够时可以与磁盘进行交换。这涉及到了RDD的另一特性:内存计算,就是将数据保存到内存中。同时,为解决内存容量限制问题,Spark为我们提供了最大的自由度,所有数据均可由我们来进行cache的设置,包括是否cache和如何cache。

      (关于cache的设置以及Spark的一些基础概念,这里解释得很详细。)

 

      如果看到这里,你的思维里对RDD还是没有任何概念的话,或许可以参照我的形象化理解:RDD,就是一个被武装起来的数据集。

      主体:

            a、由源数据分割而来,源码中对应splits变量;

      武器有下:

            b、数据集体内包含了它本身的“血统”信息,即dependencies变量,存储着它的父RDD及两者关系;      

            c、计算函数,即其与父RDD的转化方式,对应源码中的iterator(split) & compute函数;

            d、一些关于如何分块以及如何存放位置的元信息,eg:partitioner & preferredLocations。

 

       有了这些武器,RDD的容错机制也就显而易见了。容错,顾名思义就是在存在故障的情况下,计算机系统仍能正常工作。容错通常有两种方式:checkpoint(数据检查点) & logging update(记录更新),RDD采用的是logging update。

       Checkpoint意味着要在各个机器间复制大数据,花费会很高,这种拷贝操作相当缓慢,而且会消耗大量的存储资源,因此deserted。Logging update,仅支持粗颗粒度变换。也就是说,仅记录在单个块上执行的单个操作,然后创建某个RDD的变换序列存储下来,数据丢失时,就可通过“血统”重新计算,恢复数据。

       Nevertheless,血缘链(变换序列)变得很长时,建议用户此时建立一些数据检查点加快容错速度。(saveAstextFile方法手动设置)

 

       其实相比Spark的架构,网上关于RDD的一些介绍,包括设计理念、容错、内存计算等都已经比较详细了,因此我在这里只是写写自己对RDD这个概念的理解,欢迎批评指正~ 

       Ps:不喜望喷~

 

       PPs:如果我解释得不够清楚,附上一些websites,希望可以帮到你们

               RDD的原理:

https://github.com/jackfengji/test_pro/wiki/RDD%E7%9A%84%E5%8E%9F%E7%90%86

               源码详解RDD:http://www.tuicool.com/articles/zQrume

               RDD的依赖关系(源码):http://www.tuicool.com/articles/U7FVBfY

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: