【Spark】RDD机制实现模型

RDD渊源

弹性分布式数据集(RDD),它是MapReduce模型一种简单的扩展和延伸,RDD为了实现迭代、交互性和流查询等功能,需要保证RDD具备在并行计算阶段之间能够高效地数据共享的功能特性。RDD运用高效的数据共享概念和类似于MapReduce的操作方式,使得所有的计算工作可以有效地执行,并可以在当前特定的系统中获得关键性的优化。

RDD是一种有容错机制的特殊集合,可以分布在集群的节点上,以函数式编操作集合的方式,进行各种并行操作。可以将RDD理解为一个具有容错机制的特殊集合,它提供了一种只读、只能由已存在的RDD变换而来的共享内存,然后将所有数据都加载到内存中,方便进行多次重用。

a. 它是分布式的,可以分布在多台机器上,进行计算。

b. 它是弹性的,计算过程中内存不够时它会和磁盘进行数据交换。

c. 这些限制可以极大的降低自动容错开销

d. 实质是一种更为通用的迭代并行计算框架,用户可以显式的控制计算的中间结果,然后将其自由运用于之后的计算。

RDD是一个可以避免复制的容错分布式存储概念。取而代之,每一个RDD都会记住由构建它的那些操作所构成的一个图,类似于批处理计算模型,可以有效地重新计算因故障丢失的数据。由于创建RDD的操作是相对粗粒度的,即单一的操作应用于许多数据元素,该技巧比通过网络复制数据更高效。RDD很好地运用于当前广泛的数据并行算法和处理模型中,所有的这些对多个任务使用同一种操作。

RDD机制实现的模型

RDD 机制实现了多类模型,包括多个现有的集群编程模型和之前模型所没有支持的新应用。在这些模型中,RDD机制不仅在性能方面能够和之前系统相匹配,在其他方面,他们也能加入现有的系统所缺少的新特性,比如容错性,straggler容忍和弹性。我们讨论以下四类模型。

迭代式算法

一种目前已经开发的针对特定系统最常见的的工作模式是迭代算法,比如应用于图处理,数值优化,以及机器学习中的算法。RDD可以支持广泛类型的各种模型,包括Pregel,像HaLoop和Twister这类的迭代式MapReduce模型,以及确定版本的GraphLab和PowerGraph模型。

关系查询

在MapReduce集群中的首要需求中的一类是执行SQL查询,长期运行或多个小时的批量计算任务和即时查询。这促进了很多在商业集群中应用的并行数据库系统的发展。

MapReduce相比并行数据库在交互式查询有非常大的缺陷,例如MapReduce的容错机制模型,而我们发现通过在RDD操作中实现很多常用的数据库引擎的特性(比如,列处理),这样能够达到相当可观的性能。

MapReduce

RDD通过提供MapReduce的一个超集,能够高效地执行MapReduce程序,同样也可以指向比如DryadLINQ这样常见的机遇DAG数据流的应用。

流式数据处理

Spark与定制化系统最大的区别是Spark也使用RDD实现了流式处理。流式数据处理已经在数据库和系统领域进行了很长时间研究,但是实现大规模流式数据处理仍然是一项挑战。当前的模型并没有处理在大规模集群中频繁出现的straggler的问题,同时对故障恢复的方式也非常有限,需要大量的复制或浪费很长的恢复时间。特别是,当前的系统是基于一种持续操作的模型,这就需要长时间的有状态的操作处理每一个到达的记录。为了恢复一个丢失的节点,当前的系统需要保存每一个操作符的两个副本,或通过一系列耗费大量开销的串行处理来对上游的数据进行重放。

Spark提出了一个新的模型,离散数据流(D-Streams),来解决这样的问题。对使用长期状态处理的过程进行替换,D-Streams 把流式计算的执行当做一系列短而确定性的批量计算的序列,将状态保存在RDD里。D-Stream模型通过根据相关RDD的依赖关系图进行并行化恢复,就能达到快速的故障恢复,这样不需要通过复制。另外,它通过推测(Speculative)来支持对straggler迁移执行,例如,对那些慢任务运行经过推测的备份副本。尽管D-Stream将计算转换为许多不相关联的jobs来运行从而增加了部分延迟,然而我们证明了D-Stream能够被达到次秒级延时的实现,这样能够达到以前系统单个节点的性能,并能线性扩展到100个节点。D-Stream 的强恢复特性让他们成为了第一个处理大规模集群特性的流式处理模型,并且他们基于RDD的实现使得应用能够有效的整合批处理和交互式查询。

小结

Spark将这些模型整合到一起,RDD还能支持一些现有系统不能表示的新的应用。例如,许多数据流应用程序还需要加入历史数据的信息;通过使用 RDD 可以在同一程序中同时使用批处理和流式处理,这样来实现在所有模型中数据共享和容错恢复。同样的,流式应用的操作者常常需要在数据流的状态上执行即时查询;在D-Stream中的RDD能够如静态数据形式进行查询。我们使用一些在线机器学习和视频分析的实际应用来说明了这些用例。更一般的说,每一个批处理应用常常需要整合多个处理类型:比如,一个应用可能需要使用SQL提取一个数据集,在数据集上训练一个机器学习模型,之后对这个模型进行查询。由于计算的大部分时间花在系统之间共享数据的分布式文件系统的I/O开销上,因此使用当前多个系统组合而成的工作流的效率非常的低下。使用一个基于RDD机制的系统,这些计算可以在同一个引擎中紧接着执行,而不需要额外的I/O。

转载请注明作者Jason Ding及其出处

GitCafe博客主页(http://jasonding1354.gitcafe.io/)

Github博客主页(http://jasonding1354.github.io/)

CSDN博客(http://blog.csdn.net/jasonding1354)

简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)

Google搜索jasonding1354进入我的博客主页

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 04:18:03

【Spark】RDD机制实现模型的相关文章

RDD机制实现模型Spark初识

Spark简介 Spark是基于内存计算的大数据分布式计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性.       在Spark中,通过RDD(Resilient Distributed Dataset,弹性分布式数据集)来进行计算,这些分布式集合,并行的分布在整个集群中.RDDs是Spark分发数据和计算的基础抽象类. RDD属性: - A list of partitions - A function for computing eac

【spark 深入学习 03】Spark RDD的蛮荒世界

RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学术话的语言来阐述RDD是什么,用简单.容易理解的方式来描述. 一.什么是RDD,RDD出现的背景 Mapreduce计算模型的出现解决了分布式计算的诸多难题,但是由于MR对数据共享的解决方案比较低效,导致MR编程模型效率不高,将数据写到一个稳定的外部存储系统,如HDFS,这个会引起数据复写.磁盘IO

Apache Spark RDD(Resilient Distributed Datasets)论文

Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD 抽象 2.2 Spark 编程接口 2.2.1 例子 – 监控日志数据挖掘 2.3 RDD 模型的优势 2.4 不适合用 RDDs 的应用 3 Spark 编程接口 3.1 Spark 中 RDD 的操作 3.2 举例应用 3.2.1 线性回归 3.2.2 PageRank 4 表达 RDDs 5

Spark RDD使用详解1--RDD原理

RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现.RDD必须是可序列化的.RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操

Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)

Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD 抽象 2.2 Spark 编程接口 2.2.1 例子 – 监控日志数据挖掘 2.3 RDD 模型的优势 2.4 不适合用 RDDs 的应用 3 Spark 编程接口 3.1 Spark 中 RDD 的操作 3.2 举例应用 3.2.1 线性回归 3.2.2 PageRank 4 表达 RDDs 5

Spark RDD初探(一)

本文概要 本文主要从以下几点阐述RDD,了解RDD 什么是RDD? 两种RDD创建方式 向给spark传递函数Passing Functions to Spark 两种操作之转换Transformations 两种操作之行动Actions 惰性求值 RDD持久化Persistence 理解闭包Understanding closures 共享变量Shared Variables 总结 Working with Key-Value Pairs.Shuffle operations.patition

Spark:RDD的设计与运行原理

# Spark:RDD的设计与运行原理 ## 1.RDD设计背景在实际应用中,存在许多迭代式算法和家忽视数据挖掘工具,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即下一个阶段的输出结果会作为下一个阶段的输入.但是,目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制.磁盘IO和序列化开销.虽然类似Pregel等图形计算框架也是将结果保存在内存中.但是,这些框架只能支持一些特定的计算模式,并没有提供一种通用的数据抽象.RDD就是为了满足这种需求出现的,它提

Spark RDD解密

1.  基于数据集的处理: 从物理存储上加载数据,然后操作数据,然后写入数据到物理设备; 基于数据集的操作不适应的场景: 不适合于大量的迭代: 不适合交互式查询:每次查询都需要对磁盘进行交互. 基于数据流的方式不能够复用曾经的结果或者中间的结果; 2. RDD弹性数据集 特点: A)自动的进行内存和磁盘数据的存储切换: B) 基于lineage的高效容错: C) Task如果失败会自动进行重试 D) Stage如果失败会自动进行重试,而且只会计算失败的分片; E) Checkpoint和pers

spark 存储机制详解

我们知道spark可以将运行过的RDD存储到内存上, 并在需要的时候重复利用. 那么spark是怎么完成这些工作的, 本文将通过分析源码来解释RDD的重复利用过程. 在上一篇文章解释了spark的执行机制, DAGScheduler负责分解action, 在DAGScheduler.getMissingParentStages中, spark首次利用了过去的RDD, 而所使用的函数就是DAGScheduler.getCacheLocs. 1 private val cacheLocs = new