c语言sscanf函数的用法是什么
306
2022-11-17
大数据学习笔记-------------------(2)
第2章 Spark弹性分布数据集
2.1 弹性分布式数据集
弹性分布式数据集(Resilient Distributed Datasets(RDD))是spark的一种基本的数据结构。RDD是一个对象不可变的分布式集合。在RDD里的每个数据集被划分成逻辑分区,这写数据集可能在集群中的不同节点上进行计算。RDD可以包含Python、Scala、Java任意类型的对象,甚至用户定义的类。
形式上,一个RDD是一个只读分区记录的集合。RDD通过对表存储结构上的数据或其他的RDD确定操作被创建。 RDD是一个可以并行操作元素的容错集合。
有两种方法创建RDD:并行驱动程序中存在的集合;引用外部存储系统的一个数据集,例如系统共享文件、HDFS、HBase或者提供Hadoop输入格式的
任何数据源。
Spark利用RDD的概念去实现更快和高效的MapReduce操作。让我们先讨论怎么使MapReduce的操作发生?为什么它们不是那么高效?
2.2 MapReduce数据分享效率低
MapReduce被广泛用于处理和生成一个大数据集,该大数据集是通过在一个集群上进行并行的分布式计算产生的。它允许用户编写并行计算,使用一组高层次的operator,而不必担心工作分配和容错。
不幸的是,当前大多数框架,重用计算(例:二MapReduce任务之间)数据的唯一方法是将其写入外部稳定的存储系统(例如:HDFS)。虽然这个框架为访问集群的计算资源提供了大量的抽象,但用户仍然想要更多。
迭代和交互式应用需要通过并行job来满足更快速的数据共享。在MapReduce上进行数据共享是缓慢,由于replication,序列化和磁盘IO。关于存储系统,大部分的Hadoop应用,它们花费90%以上的时间做HDFS读 - 写操作。
2.3 MapReduce进行迭代操作
重用多级应用程序在多个计算的中间结果。下图说明了目前的框架是如何工作的,同时做MapReduce的迭代操作。由于数据复制,磁盘I/ O和系列化,使系统变慢。
2.4 MapReduce进行交互操作
用户对相同的数据子集执行ad-hoc(点对点)查询。每个查询会对表存储做磁盘I / O操作,它严重影响应用程序执行时间。下图说明了目前的框架,同时MapReduce做交互查询的工作方式。
2.5 Spark RDD数据分享
RDD支持在内存中处理数据。这意味着,它存储横跨的作业的对象的内存状态和对象那些作业之间共享。在内存中的数据共享是网络和磁盘的10到100倍。
在Spark RDD上进交互和迭代操作。
2.6 Spark RDD 迭代操作
下面给出的图显示SparkRDD迭代操作。它把中间结果存储在分布式内存中而不是Stable存储器中(磁盘),这样会使系统更快。
注意:如果分布式内存(RAM)足以存储中间结果(作业状态),那么它会在内存上存储这些结果。
2.7 Spark RDD交互操作
此图显示Spark RDD交互式操作。如果不同查询在同一组数据上反复运行,该特定数据可被保存在内存中为了更好的运行。
默认情况下,每个变换的RDD在每次运行其上的动作被重新计算。然而,也可能会持续一个RDD在内存中,在这种情况下,为了更快地访问,Spark将保持元素周围的群集上,在查询它的下一次。同时还支持在磁盘上保存RDD,或跨多个节点的复制。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~