弹性分布式数据集(RDD,Resilient Distributed Datasets),是Spark的核心抽象,是对分布式内存的抽象使用,它表示已被分区、只读的、并提供了一组丰富的操作方式来操作这些数据集合。这些数据集的全部或部分可以缓存在内存中,在多次计算间重复使用,省去了大量的磁盘IO操作。在这些操作中,诸如map、flatMap、filter等转换操作很好地契合了Scala的集合操作。除此之外,RDD还提供了诸如join、groupBy、reduceByKey等更为方便的操作,以支持常见的数据运算。
RDD具备像MapReduce等数据流模型的容错特性,允许用户在大型集群上执行基于内存的计算。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见,二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上的执行批量操作(如map、join和group by)来创建,但是这些限制使得实现容错的开销很低。与分布式共享内存系统需要付出高昂代价的检查点和回滚机制不同,RDD通过Lineage机制来重建丢失的分区:一个RDD中包含了如何从其他RDD衍生(计算)出本RDD所必需的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区,从而不需要检查点操作就可以重构丢失的数据分区。尽管RDD不是一个通用的共享内存抽象,但却具备了良好的描述能力、可伸缩性和可靠性,能够广泛适用于数据并行类应用。
通常来讲,针对数据处理有几种常见模型,包括:迭代计算(Iterative Algorithms)、交互式查询(Relational Queries)、批处理(MapReduce)、实时流处理(Stream Processing)。例如Hadoop MapReduce采用了MapReduces模型,Storm则采用了Stream Processing模型。RDD混合了这四种模型,使得Spark可以应用于大多数大数据处理场景,图3-1展示了Spark基于RDD的编程模型。(www.xing528.com)
图3-1 Spark基于RDD应对多种大数据处理场景
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。