今天小编给大家分享一下RDD的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Spark 编程模型是弹性分布式数据集(Resilient Distributed Dataset. RDD),它是 MapReduce 模型的扩展和延伸,但它解决了 MapReduce的缺陷:在并行计算阶段高效地进行数据共享。运用高效的数据共享概念和类似于MapReduce的操作方式,使得并行计算能够高效地进行,并可以在特定的系统中得到关键的优化。
相比以前集群容错处理模型,如MapReduce,他们将计算转换为一个有向无环图 (DAG)的任务集合。这使在这些模型中能够有效地恢复DAG中故障和慢节点执行的任务,但是这些模型中除了文件系统外没有提供其他的存储方式,这就导致了在网络上进行频繁的数据复制而造成I/O压力。
由于RDD提供一种基于粗粒度变换(如map、filter和join等)的接口, 该接口会将相同的操作应用到多个数据集上,这就使得它们可以记录创建数据集的“血统” (Lineage),而不需要存储真正的数据,从而达到高效的容错性。
当某个RDD分区丢失的时候, RDD记录有足够的信息来重新计算,而且只需要计算该分区,这样丢失的数据可以很快地恢复, 不需要昂贵的复制代价。
基于RDD机制实现了多类模型计算,包括多个现有的集群编程模式。在这些模型中,RDD 不仅在性能方面达到了之前的系统水平,也带来了现有系统所缺少的新特性,如容错性、慢节 点执行和弹性资源分配等。这些模型包括以下几方面的内容。
(1) 迭代计算:目前最常见的工作方式,比如应用于图处理、数值优化以及机器学习中的 算法。RDD可以支持各类型模型,包括Pregel、MapReduce、GraphLab和PowerGraph模型。
(2) 交互式SQL査询:在MapReduce集群中大部分需求是执行SQL查询,而MapReduce 相对并行数据库在交互式查询有很大的不足。而Spark的RDD不仅拥有很多常见数据库引擎的 特性,达到可观的性能,而且在Spark SQL中提供完善的容错机制,能够在短查询和长查询中 很好地处理故障和慢节点。
(3) MapReduceRDD:通过提供MapReduce的超集,能够高效地执行MapReduce程序, 同样也可以如DryadLINQ这样常见的DAG数据流的应用。
(4) 流式数据处理:流式数据处理已经在数据库和系统领域进行了很长时间的研究,但是大规模流式数据处理仍是一项挑战。当前的模型没有解决在大规模集群中频繁岀现的慢节点的 问题,同时对故障解决办法有限,需要大量的复制或浪费很长的恢复时间。为了恢复一个丢失的节点,当前的系统需要保存每一个操作的两个副本,或通过一系列耗费大量开销的串行处理 对故障点之前的数据进行重新处理。
Spark提出了离散数据流(D-Streams)来解决这样的问题,D-Streams把流式计算的执行当作一系列短而确定的批量计算的序列,并将状态保存在RDD中。D-Streams根据相关RDD的 依赖关系图进行并行化恢复,可以达到快速故障恢复,避免了数据复制。
另外通过推测执行来支持对Straggler迁移执行,例如,对慢任务运行经过推测的备份副本。尽管D-Streams将计算 转换为许多不相关联的作业来运行而增加延迟,但这种延迟在D-Streams集群处理中只耗费次 秒级时间。
RDD还能够支持一些现有系统不能表示的新应用。例如,许多数据流应用程序还需要加入 历史数据的信息;通过使用RDD可以在同一程序中同时使用批处理和流式处理,这样来实现 所有模型中数据共享和容错恢复;同样地,流式应用的操作者常常需要在数据流的状态上执行及时查询。一般来说,每一个批处理应用常常需要整合多个处理类型,比如,一个应用可能需 要使用SQL提取数据,在数据集上训练一个机器学习模型,然后对这个模型进行查询。
由于计算的大部分时间花在系统之间共享数据的分布式文件系统I/O的开销上,因此使用当前多个系 统组合而成的工作流效率非常低下。而使用一个基于RDD机制的系统,这些计算可以在同一 个引擎中紧接着执行,不需要额外的I/O操作,处理效率大大提高。
Spark编程中开发者需要编写一个驱动程序(Driver Program)来连接至工作进程(Worker)。驱动程序定义一个或多个RDD以及相关行动操作,驱动程序同时记录RDD的 继承关系,即“血统”。而工作进程(Worker)是一直运行的进程,它将经过一系列操作后的 RDD分区数据保存在内存中。
Spark中的操作大致可以分为四类操作,分别为创建操作、转换操作、控制操作和行为操作
创建操作(Creation Operation):用于RDD创建工作。RDD创建只有两种方法,一种 是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD。
转换操作(Transformation Operation):将RDD通过一定的操作变换成新的RDD,比 如HadoopRDD可以使用map操作变换为MappedRDD, RDD的转换操作是惰性操作, 它只是定义了一个新的RDDs,并没有立即执行。
控制操作(Control Operation):进行RDD持久化,可以让RDD按不同的存储策略保 存在磁盘或者内存中,比如cache接口默认将RDD缓存在内存中。
行动操作(Action Operation):能够触发Spark运行的操作,例如,对RDD进行collect 就是行动操作。Spark中行动操作分为两类,一类的操作结果变成Scala集合或者变量, 另一类将RDD保存到外部文件系统或者数据库中。
以上就是“RDD的知识点有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。