Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

  我们提出了弹性分布式数据集(rdd),这是一种分布式内存抽象,允许程序员以容错的方式在大型集群上执行内存计算。rdd是由当前计算框架处理效率低下的两种应用程序驱动的:迭代算法和交互式数据挖掘工具。在这两种情况下,将数据保存在内存中可以提高一个数量级的性能。为了有效地实现容错,rdd提供了一种受限制的共享内存形式,基于对共享状态的粗粒度转换而不是细粒度更新。然而,我们展示了rdd的表达能力足以捕获广泛的计算类,包括最近用于迭代作业的专门编程模型,如Pregel,以及这些模型不能捕获的新应用程序。我们在一个名为Spark的系统中实现了rdd,我们通过各种用户应用程序和基准来评估它。

1 Introduction

像MapReduce[10]和Dryad[19]这样的集群计算框架已经被广泛应用于大规模的数据分析。这些系统允许用户使用一组高级操作符编写并行计算,而不必担心工作分配和容错问题。

尽管目前的框架提供了大量的抽象来访问集群的计算资源,但它们缺乏利用分布式内存的抽象。这使得它们对于一类重要的新兴应用程序(即跨多个计算重用中间结果的应用程序)效率低下。数据重用在许多迭代机器学习和图算法中都很常见,包括PageRank、K-means聚类和逻辑回归。另一个引人注目的用例是交互式数据挖掘,用户在同一个数据子集上运行多个临时查询。不幸的是,在当前的大多数框架中,在计算之间重用数据的唯一方法(例如,在两个MapReduce任务之间)是将其写入外部稳定的存储系统,例如,一个分布式文件系统。由于数据复制和磁盘I/O,这会导致大量的开销。

认识到这个问题,研究人员已经为一些需要数据重用的应用程序开发了专门的框架。例如,Pregel[22]是一个迭代图计算系统,它将中间数据保存在内存中,而HaLoop[7]提供了一个迭代的MapReduce接口。然而,这些框架只支持特定的计算模式(例如,循环一系列MapReduce步骤),并对这些模式隐式地执行数据共享。它们不为更一般的重用提供抽象,例如,让用户加载多个数据集到内存中,并在它们之间运行特别的查询。

在本文中,我们提出了一种新的抽象,称为弹性分布式数据集(rdd),它可以在广泛的应用程序中实现高效的数据重用。rdd是容错的并行数据结构,允许用户显式地将中间结果保存在内存中,控制其分区以优化数据放置,并使用一组丰富的操作符对其进行操作。

设计rdd的主要挑战是定义能够有效提供容错的编程接口。集群中现有的内存存储抽象,如分布式共享内存[24]、keyvalue存储[25]、数据库和Piccolo[27],提供了一个基于对可变状态(例如,表中的单元格)的细粒度更新的接口。使用这个接口,提供容错的唯一方法是跨机器复制数据或记录跨机器的更新。这两种方法对于数据密集型工作负载来说都是昂贵的,因为它们需要通过集群网络复制大量数据,而集群网络的带宽远低于RAM,并且它们会产生大量的存储开销。

与这些系统相比,rdd提供了一个基于粗粒度转换(例如,映射、过滤和连接)的接口,这些转换将相同的操作应用于许多数据项。这允许他们通过记录用于构建数据集(它的沿路)而不是实际数据的转换来有效地提供容错性如果一个RDD的一个分区丢失了,RDD就有足够的信息来重新计算这个分区是如何从其他RDD中派生出来的。因此,丢失的数据可以很快恢复,而不需要昂贵的复制。

尽管基于粗粒度转换的接口一开始可能看起来很有限,但rdd非常适合许多并行应用程序,因为这些应用程序自然会将相同的操作应用于多个数据项。实际上,我们展示了rdd可以有效地表达许多集群编程模型,这些模型迄今为止被提议为独立的系统,包括MapReduce、DryadLINQ、SQL、Pregel和HaLoop,以及这些系统没有捕获的新应用程序,比如交互式数据挖掘。我们相信,RDD能够适应以前只能通过引入新框架来满足的计算需求,这是RDD抽象力量的最可靠证据。

我们已经在一个名为Spark的系统中实现了rdd,该系统正在加州大学伯克利分校和几家公司用于研究和生产应用。Spark提供了一个方便的语言集成编程接口,类似于Scala编程语言[2]中的DryadLINQ[31]。此外,Spark还可以交互地从Scala解释器中查询大数据集。我们相信Spark是第一个允许在集群中以交互速度使用通用编程语言进行内存数据挖掘的系统。

我们通过微基准测试和用户应用程序的测量来评估rdd和Spark。我们展示了Spark在迭代应用中比Hadoop快20倍,实际数据分析报告的速度提高了40倍,并且可以交互地用于扫描1tb的数据集,而延迟为5 7s。更重要的是,为了说明rdd的通用性,我们在Spark上实现了Pregel和HaLoop编程模型,包括它们所使用的布局优化,作为相对较小的库(每个库有200行代码)。

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing相关推荐

  1. Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

    1 Intruction 问题1:        许多框架缺乏充分利用分布式内存的抽象,这使得它们不适用于大量计算都需要重用中间结果的情形,但数据重用又比较常见,比如许多迭代机器学习和图算法.交互式数 ...

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

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...

  3. Spark学习笔记10-RDD(Resilient Distributed Datasets)

    1.RDD概念 RDD(Resilient Distributed Datasets),弹性分布式数据集.是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的 ...

  4. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)

    Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集) 铺垫 在hadoop中一个独立的计算,例如在一个迭代过程中,除可复制的文件系统(HDFS)外没有 ...

  5. Resilient Distributed Datasets (RDD)

    Resilient Distributed Datasets RDD本质上是一组数据的Spark表示,分布在多台机器上,使用API​​让您对其进行操作.RDD可以来自任何数据源,例如文本文件,通过JD ...

  6. Spark-RDD论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster 》有感

    动机 当前很多分布式计算框架无法实现高效的迭代式计算以及交互式数据挖掘,包括Hadoop!,首先为了解决高效这个问题,RDD提出基于内存的迭代思想,直接鄙视了Hadoop要不断进行磁盘Spill的弊端 ...

  7. Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing 阅读笔记

    文章目录 背景 弹性分布式数据集(RDDs) 如何产生 RDD 用户可以对 RDD 的控制 Spark 提供的编程接口 lineage 图示 RDDs 表示 实现 作业调度 调度思想 阶段(stage ...

  8. (翻译)Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

    中文版链接:http://shiyanjun.cn/archives/744.html

  9. RDD(Resilient Distributed Datasets 弹性分布式数据集)

    RDD是spark计算框架的核心,spark相比于hadoop的优越性在RDD中体现得淋漓尽致.对于RDD的介绍,最好的资料就是那篇专门介绍RDD的论文了,已经有中文翻译.使用scala编写spark ...

  10. 【Paper】2016_A Learning-Based Fault Tolerant Tracking Control of an Unmanned Quadrotor Helicopter

    Liu, Z., Yuan, C., Zhang, Y. et al. A Learning-Based Fault Tolerant Tracking Control of an Unmanned ...

最新文章

  1. 不止Markov决策过程,全景式分析强化学习研究内容
  2. 爱奇艺视频千万级生产 Kubernetes 集群优化实践!
  3. Product Backlog:终极任务清单
  4. oracle和mysql的备份有几种方法_Oracle 数据库的备份与恢復都有哪几种方法?
  5. visual studio 让代码看起来更舒服
  6. YUV 后面数字的含义_奔富红酒“Bin”后的数字,是什么意思?
  7. 计算机网络总复习题(含答案)
  8. 关于计算机的发展史手抄报图片,历史手抄报精选图片内容
  9. PS制作科幻特效的金色立体文字
  10. Win 10 无法锁屏,快捷键win+L失效
  11. 基于安卓的英语四级单词学习智力游戏android
  12. 【Linux】【操作】Linux环境运行Windows程序方式一览(全网最全)
  13. Android 经典 Crash 分析,Android Crash 原理分析
  14. 前端传过来Json,里边有数组
  15. c语言设计四路彩灯显示系统,四路彩灯显示系统.docx
  16. Dump分析学习指令整理
  17. 赛效:WPS如何给文档内容添加下划线
  18. java实现代码在线编译器-从零开发(三)Web并发环境下的线程安全
  19. ARCGIS10.3版本的安装入门教程(ARCGIS安装遇到的问题及解决方案)
  20. php 海关对接 进口商品_海关179对接联调-在线咨询-210112

热门文章

  1. STM32CUBEIDE中修改FLASH起始地址的方法
  2. “职业丑人”:大公司雇“职业杀手”大裁员
  3. AHU计科(伪)新生指南
  4. MySQL数据库(15):高级数据操作-新增数据
  5. Avatar Scaler
  6. python中的scaler_【笔记】scikit-learn中的Scaler(归一化)
  7. 人工智能的局限性--王垠
  8. flv格式转换为mp4(ffmpeg)
  9. RED5与tomcat整合
  10. 常用路由器术语缩略语表