《Spark大数据处理:技术、应用与性能优化》——3.2 弹性分布式数据集

3.2 弹性分布式数据集

本节简单介绍RDD,并介绍RDD与分布式共享内存的异同。
3.2.1 RDD简介
在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(resilient distributed dataset,RDD),它是逻辑集中的实体,在集群中的多台机器上进行了数据分区。通过对多台机器上不同RDD分区的控制,就能够减少机器之间的数据重排(data shuffling)。Spark提供了“partitionBy”运算符,能够通过集群中多台机器之间对原始RDD进行数据再分配来创建一个新的RDD。RDD是Spark的核心数据结构,通过RDD的依赖关系形成Spark的调度顺序。通过对RDD的操作形成整个Spark程序。
(1)RDD的两种创建方式
1)从Hadoop文件系统(或与Hadoop兼容的其他持久化存储系统,如Hive、Cassandra、Hbase)输入(如HDFS)创建。
2)从父RDD转换得到新的RDD。
(2)RDD的两种操作算子
对于RDD可以有两种计算操作算子:Transformation(变换)与Action(行动)。
1)Transformation(变换)。
Transformation操作是延迟计算的,也就是说从一个RDD转换生成另一个RDD的转换操作不是马上执行,需要等到有Actions操作时,才真正触发运算。
2)Action(行动)
Action算子会触发Spark提交作业(Job),并将数据输出到Spark系统。
(3)RDD的重要内部属性
1)分区列表。
2)计算每个分片的函数。
3)对父RDD的依赖列表。
4)对Key-Value 对数据类型RDD的分区器,控制分区策略和分区数。
5)每个数据分区的地址列表(如HDFS上的数据块的地址)。
3.2.2 RDD与分布式共享内存的异同
RDD是一种分布式的内存抽象,表3-1列出了RDD与分布式共享内存(Distributed Shared Memory,DSM)的对比。在DSM系统中,应用可以向全局地址空间的任意位置进行读写操作。DSM是一种通用的内存数据抽象,但这种通用性同时也使其在商用集群上实现有效的容错性和一致性更加困难。
RDD与DSM主要区别在于,不仅可以通过批量转换创建(即“写”)RDD,还可以对任意内存位置读写。RDD限制应用执行批量写操作,这样有利于实现有效的容错。特别是,由于RDD可以使用Lineage(血统)来恢复分区,基本没有检查点开销。失效时只需要重新计算丢失的那些RDD分区,就可以在不同节点上并行执行,而不需要回滚(Roll Back)整个程序。

通过备份任务的复制,RDD还可以处理落后任务(即运行很慢的节点),这点与MapReduce类似,DSM则难以实现备份任务,因为任务及其副本均需读写同一个内存位置的数据。
与DSM相比,RDD模型有两个优势。第一,对于RDD中的批量操作,运行时将根据数据存放的位置来调度任务,从而提高性能。第二,对于扫描类型操作,如果内存不足以缓存整个RDD,就进行部分缓存,将内存容纳不下的分区存储到磁盘上。
另外,RDD支持粗粒度和细粒度的读操作。RDD上的很多函数操作(如count和collect等)都是批量读操作,即扫描整个数据集,可以将任务分配到距离数据最近的节点上。同时,RDD也支持细粒度操作,即在哈希或范围分区的RDD上执行关键字查找。
后续将算子从两个维度结合在3.3节对RDD算子进行详细介绍。
1)Transformations(变换)和Action(行动)算子维度。
2)在Transformations算子中再将数据类型维度细分为:Value数据类型和Key-Value 对数据类型的Transformations算子。Value型数据的算子封装在RDD类中可以直接使用,Key-Value 对数据类型的算子封装于PairRDDFunctions类中,用户需要引入import org.apache.spark.SparkContext._才能够使用。进行这样的细分是由于不同的数据类型处理思想不太一样,同时有些算子是不同的。
3.2.3 Spark的数据存储
Spark数据存储的核心是弹性分布式数据集(RDD)。RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的。逻辑上RDD的每个分区叫一个Partition。
在Spark的执行过程中,RDD经历一个个的Transfomation算子之后,最后通过Action算子进行触发操作。逻辑上每经历一次变换,就会将RDD转换为一个新的RDD,RDD之间通过Lineage产生依赖关系,这个关系在容错中有很重要的作用。变换的输入和输出都是RDD。RDD会被划分成很多的分区分布到集群的多个节点中。分区是个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存存储。这是很重要的优化,以防止函数式数据不变性(immutable)导致的内存需求无限扩张。有些RDD是计算的中间结果,其分区并不一定有相应的内存或磁盘数据与之对应,如果要迭代使用数据,可以调cache()函数缓存数据。
图3-2为RDD的数据存储模型。

https://yqfile.alicdn.com/88579623d4fb8a8c0cc93f8fdda912525701ebb1.png" >

图3-2中的RDD_1含有5个分区(p1、p2、p3、p4、p5),分别存储在4个节点(Node1、node2、Node3、Node4)中。RDD_2含有3个分区(p1、p2、p3),分布在3个节点(Node1、Node2、Node3)中。
在物理上,RDD对象实质上是一个元数据结构,存储着Block、Node等的映射关系,以及其他的元数据信息。一个RDD就是一组分区,在物理数据存储上,RDD的每个分区对应的就是一个Block,Block可以存储在内存,当内存不够时可以存储到磁盘上。
每个Block中存储着RDD所有数据项的一个子集,暴露给用户的可以是一个Block的迭代器(例如,用户可以通过mapPartitions获得分区迭代器进行操作),也可以就是一个数据项(例如,通过map函数对每个数据项并行计算)。本书会在后面章节具体介绍数据管理的底层实现细节。
如果是从HDFS 等外部存储作为输入数据源,数据按照HDFS中的数据分布策略进行数据分区,HDFS中的一个Block对应Spark的一个分区。同时Spark支持重分区,数据通过Spark默认的或者用户自定义的分区器决定数据块分布在哪些节点。例如,支持Hash分区(按照数据项的Key值取Hash值,Hash值相同的元素放入同一个分区之内)和Range分区(将属于同一数据范围的数据放入同一分区)等分区策略。
下面具体介绍这些算子的功能。

时间: 2024-10-06 21:59:26

《Spark大数据处理:技术、应用与性能优化》——3.2 弹性分布式数据集的相关文章

《Spark大数据处理:技术、应用与性能优化》——1.2 Spark生态系统BDAS

1.2 Spark生态系统BDAS 目前,Spark已经发展成为包含众多子项目的大数据计算平台.伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS).其核心框架是Spark,同时BDAS涵盖支持结构化数据SQL查询与分析的查询引擎Spark SQL和Shark,提供机器学习功能的系统MLbase及底层的分布式机器学习库MLlib.并行图计算框架GraphX.流计算框架Spark Streaming.采样近似计算查询引擎BlinkDB.内存分布式文件系统Tachyon.资源管理框架Me

《Spark大数据处理:技术、应用与性能优化》——第1章 Spark 简 介1.1 Spark是什么

第1章 Spark 简 介 本章主要介绍Spark大数据计算框架.架构.计算模型和数据管理策略及Spark在工业界的应用.围绕Spark的BDAS 项目及其子项目进行了简要介绍.目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.GraphX.MLlib等子项目,本章只进行简要 1.1 Spark是什么 介绍,后续章节再详细阐述.Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的

《Spark大数据处理:技术、应用与性能优化》——导读

https://yqfile.alicdn.com/9fc1970337c275b04055dec83fdf7e27687dd205.png" > 前 言 Spark是发源于美国加州大学伯克利分校AMPLab的大数据分析平台,它立足于内存计算,从多迭代批量处理出发,兼顾数据仓库.流处理和图计算等多种计算范式,是大数据系统领域的全栈计算平台.Spark当下已成为Apache基金会的顶级开源项目,拥有庞大的社区支持,技术也逐渐走向成熟. 为什么要写这本书 大数据还在如火如荼地发展着,突然之间,

《Spark大数据处理:技术、应用与性能优化》——2.3 本章小结

2.3 本章小结 本章主要介绍了如何在Linux和Windows环境下安装部署Spark集群.由于Spark主要使用HDFS充当持久化层,所以完整地使用Spark需要预先安装Hadoop.通过本章介绍,读者就可以开启Spark的实战之旅了.下一章将介绍Spark的计算模型,Spark将分布式的内存数据抽象为弹性分布式数据集(RDD),并在其上实现了丰富的算子,从而对RDD进行计算,最后将算子序列转化为有向无环图进行执行和调度.

Spark大数据处理系列之Machine Learning

本文是<Spark大数据处理>系列的第四篇,其他三篇:Spark介绍. Saprk SQL和 Spark Streaming . 最近几年,机器学习.预测分析和数据科学主题得到了广泛的关注.Spark的机器学习库(Spark MLlib),包括各种机器学习算法:协同过滤算法.聚类算法.分类算法和其他算法. 在前面的<Spark大数据处理>系列文章,介绍Apache Spark框架,介绍如何使用Spark SQL库的SQL接口去访问数据,使用Spark Streaming进行实时流式

运用大数据处理技术 做好国有企业思想政治工作

在全面深化企业改革和互联网全面普及的新形势下,国有企业思想政治工作面临着许多新情况,国有企业要勇于挑战自我.求新达变,积极推进思想政治工作理念创新.手段创新,要善于运用计算机大数据处理技术,积极构建大数据思想政治工作管控体系,确保职工队伍稳定,使企业思想政治工作焕发出勃勃生机,为企业改革发展提供强有力的思想保障. 运用大数据搭建思想政治工作新平台 针对思想政治工作面临的新情况,国有企业要勇于创新,积极确立"用数据链筑牢生命线"的新理念新思路,立足企业内部网络,运用大数据处理技术,创新做

为什么我们说海量大数据处理技术会火

大数据处理技术正在改变目前计算机的运行模式.我们已经从中获得了大量收益,因为正是大数据处理技术给我们带来了搜索引擎 Google.然而故事才刚刚开始,基于以下几个原因,我们说大数据处理技术正在改变着这个世界:* 它能处理几乎各种类型的海量数据,无论是微博.文章.电子邮件.文档.音频.视频,还是其它形态的数据. * 它工作的速度非常快速:实际上几乎实时. * 它具有普及性:因为它所用的都是最普通低成本的硬件 大数据为以下这些公司提供了解决方案:eBay.Facebook.LinkedIn.Netf

用好大数据处理技术

由于一些技术问题,我国的http://www.aliyun.com/zixun/aggregation/4194.html">社会信用体系还不完善.用好大数据处理技术,是建设诚信体系的一个重要选择. 在建设诚信体系过程中,如何使信用信息公开共享成为主要难点.大数据技术能够将隐藏于海量数据中的信息和知识挖掘出来,为社会经济活动提供依据,从而提高各个领域的运行效率,大大提高整个社会经济的集约化程度.用好大数据技术,发挥大数据的优势,当信用信息可以查询匹配,市场主体的信用状况可以识别,才能让失信

中国获得大数据处理技术话语权的机会有多大?

中国能否在未来3-5年内真正获得大数据处理技术的部分话语权,或许需要考虑以下几个方面的因素: (1)从原始基础发明专利技术入手,控制大数据处理技术的源头. 数据处理技术本质上是人的智力活动的结果,专利技术和方法是人设计的数学规则.计算机是在数学规则约束下的逻辑运行载体.对于一个逻辑运行载体来说,必定存在一个起始入口,而起始入口的数学规则就是原始基础发明方法,后续的应用发明方法必定受原始基础发明方法的约束.比如目前的计算机采用二进制规则以及图灵机模式规则,后续的任何方法都受这两个基础方法的约束.