第二章:弹性分布式数据集编程
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不容许修改) | 取决于策略和应用程序 |
容错性 | 细粒度,而且靠血统来维护 | 依靠检查点和回滚来保证 |
落后任务的处理 | 任务备份 | 很难处理 |
任务安排 | 基于数据存放的位置自动实现(位置自动调动) | 取决于应用程序(经过运行时实现透明性) |
假设内存不够 | 与已有的数据流系统相似 | 性能较差 |