博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Resilient Distributed Datasets (RDD)
阅读量:5247 次
发布时间:2019-06-14

本文共 1635 字,大约阅读时间需要 5 分钟。

Resilient Distributed Datasets

 

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

其定义为:

RDD是容错的并行数据结构,允许用户明确地将中间结果保存在内存中,控制其分区以优化数据放置,并使用各种的运算符操作。

弹性分布式数据集(RDD)是Spark的基本数据结构。它是一个不可变的分布式对象集合。RDD中的每个数据集被划分为逻辑分区,其可以在集群的不同节点上计算。RDD可以包含任何类型的Python,Java或Scala对象,包括用户定义的类。

 

形式上,RDD是只读的分区记录集合。可以通过对稳定存储或其他RDD上的数据的确定性操作来创建RDD。RDD是一个容错的容错集合,可以并行操作。

 

有两种方法可以创建RDD - 在驱动程序中并行化现有集合,或在外部存储系统中引用数据集,例如共享文件系统,HDFS,HBase或提供Hadoop输入格式的任何数据源。

 

Spark利用RDD的概念来实现更快,更高效的MapReduce操作。让我们首先讨论MapReduce操作是如何发生的以及为什么它们不那么有效。

 

MapReduce中的数据共享速度很慢

MapReduce被广泛用于在集群上使用并行分布式算法处理和生成大型数据集。它允许用户使用一组高级操作符编写并行计算,而不必担心工作分配和容错。

 

不幸的是,在大多数当前框架中,在计算之间重用数据的唯一方法(Ex − between two MapReduce jobs)是将其写入外部稳定存储系统(Ex-HDFS)。虽然这个框架提供了许多用于访问集群计算资源的抽象,但用户仍然需要更多。

 

迭代交互应用程序都要求跨并行作业更快地共享数据。由于复制序列化磁盘IO, MapReduce中的数据共享很慢。对于存储系统,大多数Hadoop应用程序花费90%以上的时间进行HDFS读写操作。

 

MapReduce上的迭代操作

在多阶段应用程序中跨多个计算重用中间结果。下面的插图解释了当前框架如何工作,同时在MapReduce上执行迭代操作。由于数据复制、磁盘I/O和序列化导致系统运行缓慢,这会导致大量开销。

 

MapReduce上的交互操作

用户在同一数据子集上运行特殊查询。每个查询将在稳定的存储上执行磁盘I/O,这将支配应用程序的执行时间。

下图解释了当前框架在MapReduce上执行交互查询时是如何工作的。

 

利用RDD做数据共享

由于复制序列化磁盘IO, MapReduce中的数据共享很慢。大多数Hadoop应用程序花费90%以上的时间执行HDFS读写操作。

认识到这个问题后,研究人员开发了一个名为Apache Spark的专门框架。spark的核心思想是弹性分布式数据集(RDD);它支持内存处理计算。这意味着,它将内存状态作为一个对象跨作业存储,并且该对象可以在这些作业之间共享。内存中的数据共享速度比网络和磁盘快10到100倍。

 

在RDD中上的迭代操作

下图显示了Spark RDD上的迭代操作。它将中间结果存储在分布式内存中,而不是稳定的存储(磁盘)中,使系统速度更快。

注意:如果分布式内存(RAM)不足以存储中间结果(作业状态),那么它将把这些结果存储在磁盘上。

 

 

 

基于RDD中的交互操作

这个图显示了Spark RDD上的交互操作。如果在同一组数据上重复运行不同的查询,则可以将此特定数据保存在内存中,以获得更好的执行时间。

默认情况下,每次对每个转换后的RDD运行操作时,都可以重新计算它。不过,您也可以在内存中保存一个RDD,在这种情况下,Spark将把元素保存在集群中,以便在下次查询时更快地访问它。还支持在磁盘上持久存储RDDs,或跨多个节点复制RDDs。

转载于:https://www.cnblogs.com/tcppdu/p/10591454.html

你可能感兴趣的文章
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>