spark RDD解读---第二谈

第二章:弹性分布式数据集编程

2.1  RDD的特性和目标:RDD提供良好的编程能力,并保持:自动位置感性性调度、自动容错、可伸缩性。同时具有工做集的良好的描述能力。目前数据恢复分为两部分:检查点和记录更新,RDD支持记录更新,而且只支持粗粒度的记录更新,即rdd有哪些操做更新而来。rdd只支持大多数的分析性应用的编程模型,对于已不更新共享状态的应用不适用。缓存

2.2 RDD来源:RDD只能从(1)稳定的物理存储中的数据集(2)其余已有的RDD  执行肯定的一系列操做生成(map、filter、groupby、join)分布式

2.3  编程模型。(1)RDD被视为一个对象。(2)用户能够再RDD作一系列action,RDD被定义后并不会当即计算,会在第一次action时被计算,action有  filter、count(获取RDD计数)、collect(获取所有的数据集)、save(将RDD输出到存储系统)(3)RDD支持缓存和分区,用户能够显示的将RDD进行缓存,加快之后的复用,而且用户也能够将RDD按照key进行hash分区,而且分区支持一致性分区。工具

2.4  提供一个例子。性能

1:lines = spark.textFile("hdfs://...")spa

2:errors = lines.filter(_.startsWith("ERROR"))orm

3:errors.cache()对象

// Count errors mentioning MySQL:内存

4:errors.filter(_.contains("MySQL")).count()ci

// Return the time fields of errors mentioning

// HDFS as an array (assuming time is field

// number 3 in a tab-separated format):

5:errors.filter(_.contains("HDFS"))

6:.map(_.split('t')(3))

7:.collect()

(1)在执行到3行时,集群没有作任何的事情。(2)errors的RDD在执行第一个action也就是第4行时,才会将errors缓存起来,并开始进行计算。(3)在errors进行第4行的filter时又生成了新的rdd,而且对新的rdd执行了count操做。(4)若是某个errors分区丢失,只要相应的lines分区进行血统操做生成相应的rdd就能够。

2.5 RDD与分布式共享内存

对比工具 RDD 分布式共享内存
批量或细粒度操做 细粒度操做
批量转换 细粒度操做
一致性 不重要(RDD不容许修改) 取决于策略和应用程序
容错性 细粒度,而且靠血统来维护 依靠检查点和回滚来保证
落后任务的处理 任务备份 很难处理
任务安排 基于数据存放的位置自动实现(位置自动调动) 取决于应用程序(经过运行时实现透明性)
假设内存不够 与已有的数据流系统相似 性能较差
相关文章
相关标签/搜索