基本上提到Spark,常常被提及的就是其性能优势,相比同是批处理的MapReduce,Spark在实验环境下可做到计算性能提高10-100倍,而Spark计算性能的提升,与其引入的RDD有很大关系。今天的大数据学习分享,我们就主要来讲讲,Spark RDD概念及特征。
RDD为什么是Spark的核心概念
Spark建立在统一抽象的RDD之上,使得Spark可以很容易扩展,比如Spark Streaming、Spark SQL、Machine Learning、Graph都是在spark RDD上面进行的扩展。
RDD是什么呢?理解一下概念:
RDD(Resilient Distributed Dataset):弹性分布式数据集。
RDD是只读的,由多个partition组成。
Partition分区,和Block数据块是一一对应的。
RDD特征
RDD叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合.
Dataset,就是一个集合,存储很多数据。
Distributed,它内部的元素进行了分布式存储,方便于后期进行分布式计算。
Resilient,表示弹性,rdd的数据是可以保存在内存或者是磁盘中。
(1)A list of partitions
一个分区(Partition)列表,数据集的基本组成单位。
这里表示一个rdd有很多分区,每一个分区内部是包含了该rdd的部分数据,
spark中任务是以task线程的方式运行,一个分区就对应一个task线程。
用户可以在创建RDD时指定RDD的分区个数,如果没有指定,那么就会采用默认值。
val rdd=sparkContext.textFile("/words.txt")
如果该文件的block块个数小于等于2,这里生产的RDD分区数就为2
如果该文件的block块个数大于2,这里生产的RDD分区数就与block块个数保持一致
(2)A function for computing each split
一个计算每个分区的函数
Spark中RDD的计算是以分区为单位的,每个RDD都会实现compute计算函数以达到这个目的。
(3)A list of dependencies on other RDDs
一个rdd会依赖于其他多个rdd
这里就涉及到rdd与rdd之间的依赖关系,spark任务的容错机制就是根据这个特性(血统)而来。
(4)Optionally
a Partitioner for key-value RDDs e.g.to say that the RDD is hash-partitioned
一个Partitioner,即RDD的分区函数(可选项)
当前Spark中实现了两种类型的分区函数,一个是基于哈希的HashPartitioner,(key.hashcode%分区数=分区号),另外一个是基于范围的RangePartitioner。
只有对于key-value的RDD,并且产生shuffle,才会有Partitioner,非key-value的RDD的Parititioner的值是None。
(5)Optionally
a list of preferred locations to compute each split on(e.g.block locations for an HDFS file)
一个列表,存储每个Partition的优先位置(可选项)
这里涉及到数据的本地性,数据块位置最优。
spark任务在调度的时候会优先考虑存有数据的节点开启计算任务,减少数据的网络传输,提升计算效率。
关于大数据学习,Spark RDD概念及特征,以上就为大家做了基本的介绍了。RDD于Spark框架而言,是非常重要的核心概念,在初期入门阶段,对于RDD的概念一定要理解到位。成都加米谷大数据,专业
大数据培训机构,大数据开发,数据分析与挖掘,零基础班本月正在招生中,课程大纲及预约试听可联系客服!