Spark最重要的一个功能是它可以通过各种操作(operations)持久化(或者缓存)一个集合到内存中。当你持久化一个RDD的时候,每一个节点都将参与计算的所有分区数据存储到内存中,并且这些数据可以被这个集合(以及这个集合衍生的其他集合)的动作(action)重复利用。这个能力使后续的动作速度更快 ...
分类:
其他好文 时间:
2016-08-03 00:03:29
阅读次数:
204
RDD是个抽象类,定义了诸如map()、reduce()等方法,但实际上继承RDD的派生类一般只要实现两个方法: def getPartitions: Array[Partition] def compute(thePart: Partition, context: TaskContext): Ne ...
分类:
其他好文 时间:
2016-08-02 23:43:14
阅读次数:
137
1. 整体架构 GraphX 的整体架构(如图 1所示)可以分为三部分。 图 1 GraphX 架构 存储和原语层: Graph 类是图计算的核心类。内部含有 VertexRDD、 EdgeRDD 和RDD[EdgeTriplet] 引用。 GraphImpl 是 Graph 类的子类,实现了图操作 ...
分类:
Web程序 时间:
2016-08-01 17:17:17
阅读次数:
504
Spark数据存储的核心是弹性分布式数据集(RDD)。 RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的。 逻辑上RDD的每个分区叫一个Partition。 在Spark的执行过程中,RDD经历一个个的Transfomation算子之后,最后通过Action算子进行触 ...
分类:
其他好文 时间:
2016-07-31 22:04:26
阅读次数:
193
RDD是一种分布式的内存抽象,下表列出了RDD与分布式共享内存(Distributed Shared Memory,DSM)的对比。 在DSM系统[1]中,应用可以向全局地址空间的任意位置进行读写操作。 DSM是一种通用的内存数据抽象,但这种通用性同时也使其在商用集群上实现有效的容错性和一致性更加困 ...
分类:
其他好文 时间:
2016-07-31 22:00:29
阅读次数:
582
Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理。 Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真 ...
分类:
Web程序 时间:
2016-07-31 21:59:35
阅读次数:
1482
RDD的创建 两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase、Amazon S3等。 RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性 ...
分类:
Web程序 时间:
2016-07-31 20:45:10
阅读次数:
254
RDD的缓存 Spark速度非常快的原因之一,就是在不同操作中在内存中持久化(或缓存)一个数据集。当持久化一个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此数据集(或者衍生出的数据集)进行的其他动作(action)中重用。这使得后续的动作变得更加迅速(通常快10倍)。RDD相关的持久 ...
分类:
Web程序 时间:
2016-07-31 20:43:23
阅读次数:
676
RDD的转换 Spark会根据用户提交的计算逻辑中的RDD的转换和动作来生成RDD之间的依赖关系,同时这个计算链也就生成了逻辑上的DAG。接下来以“Word Count”为例,详细描述这个DAG生成的实现过程。 Spark Scala版本的Word Count程序如下: file和counts都是R ...
分类:
Web程序 时间:
2016-07-31 20:39:29
阅读次数:
223
RDD的检查点 RDD的缓存能够在第一次计算完成后,将计算结果保存到内存、本地文件系统或者Tachyon中。通过缓存,Spark避免了RDD上的重复计算,能够极大地提升计算速度。但是,如果缓存丢失了,则需要重新计算。如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容忽视的。为 ...
分类:
Web程序 时间:
2016-07-31 20:34:50
阅读次数:
184