Article Outline
TOC
Collection Outline
1.RDD概述
1.1 背景
计算机普及和移动互联网导致数据量爆发式增长
当前的集群存在一些挑战
- 并行化处理
- 集群的容错-节点故障和慢节点问题
- 多用户共享-动态扩展和缩减计算资源
相应的解决方法(编程模式)
- MapReduce编程模式
- Storm流式处理系统
- Impala交互式SQL查询系统
- Bulk Synchronous Parallel(BSP)并行迭代图计算模型
上述几个编程模型需要高效的数据共享;交互数据挖掘需要对同一数据子集进行多个特定的查询;流式应用则需要随时间对状态进行维护和共享。但是上述框架缺乏针对数据共享的高效元语。
Spark
- 设计了统一的编程抽象——弹性分布式数据集(RDD),用户直接控制数据的共享;
- 支持迭代、批处理、流式处理和交互式;
- 以很小的代价提供节点故障和慢节点容错处理功能;
- 更为快速的计算能力;
- 适合多用户管理,允许应用程序弹性地扩展和缩减计算资源。
1.2 RDD简介
Spark编程模型地核心是弹性分布式数据集(Resilient Distributed Dataset,RDD),是MapReduce模型的扩展、延申和改进,解决了MR的缺陷:在并行阶段高效的数据共享,并将MR的操作方式进行关键的优化。
MR等模型也能够将计算转换为一个有向无环图(DAG)的任务集合,这是故障和慢节点问题的关键解决办法,但这些模型除了文件系统外没有其他的存储方式,导致频繁的网络IO。
RDD提供一种基于粗粒度变换(如map\filter)的接口,该接口将相同的操作应用到多个数据集,可以记录创建数据集的"血统"(Lineage),不需要存储真正的数据,从而达到高效的容错性。基于RDD机制实现了多类模型计算:
迭代计算
图处理、数值优化、机器学习算法
交互式SQL查询
Spark SQL提供可观的性能、完善的容错机制
MapReduceRDD
提供MR的超集,DAG数据流
流式数据处理
1.3 RDD的类型
Spark中RDD的操作主要有创建操作、转换操作、控制操作和行为操作
- 创建操作:用于RDD的创建。RDD的创建有两种方法,一种是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD。
- 转换操作(Transformation Operation):将RDD通过一定的操作变成新的RDD,比如HadoopRDD可以使用map操作变换为MapperdRDD,RDD的转换操作是惰性操作,它只是定义了一个新的RDDs,并没有立即执行。
- 控制操作(Control Operation):进行RDD持久化,可以让RDD按不同的存储策略保存在磁盘或者内存中,比如cache接口默认将RDD缓存在内存中。
- 行动操作(Action Operation):能够触发Spark运行的操作,例如,对RDD进行collect就是行动操作。Spark中行动操作分为两类,一类的操作结果变成Scala集合或者变量,另一类将RDD保存到外部文件系统或者数据库中。