Spark的数据存储

  Spark数据存储的核心是弹性分布式数据集(RDD)。 RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的。 逻辑上RDD的每个分区叫一个
Partition。
  在Spark的执行过程中,RDD经历一个个的Transfomation算子之后,最后通过Action算子进行触发操作。 逻辑上每经历一次变换,就会将RDD转换为一个新的RDD,RDD之间通过Lineage产生依赖关系,这个关系在容错中有很重要的作用。 变换的输入和输出都是RDD。RDD会被划分成很多的分区分布到集群的多个节点中。 分区是个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存存储。 这是很重要的优化,以防止函数式数据不变性(immutable)导致的内存需求无限扩张。 有些RDD是计算的中间结果,其分区并不一定有相应的内存或磁盘数据与之对应,如果要迭代使用数据,可以调cache()函数缓存数据。

          图1  RDD数据管理模型

    图1中的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-08-06 01:05:31

Spark的数据存储的相关文章

客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)

今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些不同的想法. 首先,个人职业发展是否成功, 技术只是其中一小块,尤其是在大公司, 更多的是依靠所谓的软实力.作为一个对技术有追求的工匠,我们下面重点说技术相关的. 现在回头看计算机行业的发展,我们看到不同的发展阶段: 1. PC时代,这个时代离我们并不遥远, 也有是2000年前后, 该时代最鲜明的特征是Win

万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 目前大数据存储查询方案大概可以分为:Hbase系.Dremel系.预聚合系.Lucene系,笔者就自身的使用经验说说这几个系

Alluxio增强Spark和MapReduce存储能力

Alluxio的前身为Tachyon.Alluxio是一个基于内存的分布式文件系统:Alluxio以内存为中心设计,他处在诸如Amazon S3. Apache HDFS 或 OpenStack Swift存储系统和计算框架应用Apache Spark 或Hadoop MapReduce中间,它是架构在底层分布式文件系统和上层分布式计算框架之间的一个中间件. 对上层应用来讲,Alluxio是一个管理数据访问和快速存储的中间层,对底层存储而言,Alluxio消除了大数据业务和存储系统依赖和鸿沟,

Azure HDInsight 和 Spark 大数据实战(二)

HDInsight cluster on Linux 登录 Azure portal (https://manage.windowsazure.com ) 点击左下角的 NEW 按钮,然后点击 DATA SERVICES 按钮,点击 HDINSIGHT,选择 HADOOP ON LINUX,如下图所示. 输入集群名称,选择集群大小和账号,设定集群的密码和存储账号,下表是各个参数的含义和配置说明. Name Value Cluster Name Name of the cluster. Clust

地铁译:Spark for python developers ---Spark的数据戏法

聚焦在 Twitter 上关于Apache Spark的数据, 这些是准备用于机器学习和流式处理应用的数据. 重点是如何通过分布式网络交换代码和数据,获得 串行化, 持久化 , 调度和缓存的实战经验 . 认真使用 Spark SQL, 交互性探索结构化和半结构化数据. Spark SQL 的基础数据结构是?Spark dataframe, Spark dataframe 受到了 Python Pandas?dataframe 和R dataframe 的启发. 这是一个强大的数据结构, 有R 或

Apache Spark-1.0.0浅析(十):数据存储——读写操作

“RDD是由不同的partition组成的,transformation和action是在partition上面进行的:而在storage模块内部,RDD又被视为由不同的block组成,对于RDD的存取是以block为单位进行的,本质上partition和block是等价的,只是看待的角度不同.在Spark storage模块中中存取数据的最小单位是block,所有的操作都是以block为单位进行的.” BlockManager中定义了三种主要的存储类型(tackyonStore暂且不做分析)

TableStore时序数据存储 - 架构篇

摘要: 背景 随着近几年物联网的发展,时序数据迎来了一个不小的爆发.从DB-Engines上近两年的数据库类型增长趋势来看,时序数据库的增长是非常迅猛的.在去年我花了比较长的时间去了解了一些开源时序数据库,写了一个系列的文章(综述.HBase系.Cassandra系.InfluxDB.Prometheus),感兴趣的可以浏览. 背景随着近几年物联网的发展,时序数据迎来了一个不小的爆发.从DB-Engines上近两年的数据库类型增长趋势来看,时序数据库的增长是非常迅猛的.在去年我花了比较长的时间去

大数据存储的进化史 --从 RAID 到 Hdfs

我们都知道现在大数据存储用的基本都是 Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdfs. 我们先来思考两个问题. 在 Hdfs 出现以前,计算机是通过什么手段来存储"大数据" 的呢? 为什么会有 Hadoop Hdfs 出现呢? 在 Hdfs 出现以前,计算机是通过什么手段来存储"大数据" 要知道,存储大量数据有三个最重要的指标,那就是速度,容量,容错性.速度和容量

为什么Elasticsearch不适合做数据存储?(转学习使用)

一.问题描述 公司想尝试使用Elasticsearch来存一部分数据,以此缓解数据增长带来的对数据库的压力.在研究了一段时间后,发现Elasticsearch不适合作为数据存储使用. 二.理由如下 1.mapping不可改,不能改index属性.Elasticsearch中以定义的mapping不能修改名字和属性,无法修改名字勉强能接受,但无法需要改属性. 官方文档中介绍了几种修改mapping的方法.一个是新建一个字段,程序中所有地方修改名字,这对于复杂的项目容易出错,而且无法保留原来的数据: