Spark计算模型(一):最基本的数据抽象RDD ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。 官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。 弹性分布式数据集RDD. RDD概述 1.什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集。是Spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可并行计算的集合。 Resilient:弹性的。意思是数据可以保存在磁盘或者内存中。 Distributed:它的数据分布式存储,并且可以做分布式的计算。 Dataset:一个数据集,简单的理解为集合,用于存放数据。 RDD的属性
a) 一组分片(Partition),即数据集的基本组成单位。 每个RDD都有一个分区列表。 b) 一个计算每个分区的函数。 作用在每个分区上面的函数。 c) RDD之间的依赖关系。 一个RDD依赖其他多个RDD,RDD的容错机制就是根据这个特性。 d) 一个Partitioner,即RDD的分片函数。 此属性为可选项:针对与kv键值对的RDD才具有该分区特性。 e) 一个列表,存储存取每个Partition的优先位置(preferred location)。 此属性为可选项:数据本地性,选择金亮存储在worker节点上的数据节点。 2. 创建RDD的方式 a) 读取外部数据源 valrdd1 = sc.textFile(“文件”) b) 通过已经存在的集合 val rdd2=sc.parallelize(Array(1,2,3,4)); c) 有一个RDD转化成一个新的RDD Valrdd3 = rdd2.flatMap 3. RDD的算子分类 a) Transformation:转换操作,将一个rdd转换生成一个新的rdd,它属于懒加载,延迟执行,并不会立即触发任务的执行。 b) Action:此时才会真正的触发任务的计算。 4. RDD中的两种依赖关系 a) 窄依赖:每个父RDD的partition最多只被子的RDD的一个partition b) 宽依赖:子rdd的partition会依赖于父RDD的多个partition 5. Lineage(血统) 它会记录下当前作用在RDD上的分区数据(元数据)和一系列的转换行为,当子RDD中的某个分区数据丢失之后,只需要通过血统来重新计算回复当前丢失数据的分区(spark的容错机制)。
|