【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进入我的博客主页
【Spark】RDD机制实现模型的更多相关文章
- RDD机制实现模型Spark初识
Spark简介 Spark是基于内存计算的大数据分布式计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性. 在Spark中,通过RDD( ...
- 通过WordCount解析Spark RDD内部源码机制
一.Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码:在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据 ...
- Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)论文 | ApacheCN
Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...
- Apache Spark RDD(Resilient Distributed Datasets)论文
Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...
- Spark RDD基本概念与基本用法
1. 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具 ...
- 【spark 深入学习 03】Spark RDD的蛮荒世界
RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学 ...
- spark RDD 常见操作
fold 操作 区别 与 co 1.mapValus 2.flatMapValues 3.comineByKey 4.foldByKey 5.reduceByKey 6.groupByKey 7.so ...
- spark RDD官网RDD编程指南
http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...
- Spark RDD初探(一)
本文概要 本文主要从以下几点阐述RDD,了解RDD 什么是RDD? 两种RDD创建方式 向给spark传递函数Passing Functions to Spark 两种操作之转换Transformat ...
随机推荐
- NodeJS错误处理最佳实践
NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管.但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学.如果你实在没有耐心,那就直接绕过长篇大论跳到 ...
- mysql update常见实例
在MySQL中使用update语句的时候,Where条件或者值都可以使用子查询,比如: ) ); 但是如果子查询和更新的表是同一个表的话,MySQL会报如下的错误:中涉及到的子查询要格外注意 Erro ...
- centos 6.5 文件目录管理
Linux不存在像Windows那样分盘符的概念,Linux在安装之后就以文件目录的形式来进行管理,存储.即当我们安装完系统之后,我们就会看到有一堆的目录出现在根目录下.同时Linux使用正斜杠“/” ...
- Android开发6——布局中的wrap_content和fill_parent以及match_parent
一.言简意赅 fill_parent 是让控件宽或者高占全屏 wrap_content是让控件的高或宽仅仅把控件里的内容包裹住而不是全屏 二.分别来看 1 fill_parent 设置一个构件的布局 ...
- 自己写的一个操作Mysql的简单的实例
#include <WinSock.h> #include <stdio.h> #include <iostream> #include <windows.h ...
- 关于Java Collections的几个常见问题
列举几个关于Java Collections的常见问题并给出答案. 1. 什么时候用LinkedList,什么时候用ArrayList? ArrayList是使用数组实现的list,本质上就是数组.A ...
- Rewrite MSIL Code on the Fly with the .NET Framework Profiling API
http://clrprofiler.codeplex.com/ http://blogs.msdn.com/b/davbr/archive/2012/11/19/clrprofiler-4-5-re ...
- Oracle数据库操作类及连接方法
创建DataBaseAccess引用库下面包括DBConnectionString.cs,DBType.cs ,SysName.cs 三个类 DBConnectionString: using Sys ...
- ny27 水池数目
水池数目 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...
- vue路由配置,vue子路由配置
上一篇关于vue环境配置已经写好了!按照操作就行了! 现在一个项目已经部署完成,接下来我们从路由开始! 还记得在初始化项目的时候,有提示是否需要安装vue-router,对没错,vue中路由全靠它! ...