Spark的数据存储
2016-05-16 12:32
204 查看
Spark数据存储的核心是弹性分布式数据集(RDD)。RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的。逻辑上RDD的每个分区叫一个Partition。
在Spark的执行过程中,RDD经历了一个个的Transformation算子后,最后通过Action算子进行触发操作。
逻辑上每经历一次变换,就会将RDD转换成为一个新的RDD,RDD之间通过Lineage产生依赖关系,这个关系在容错中有很重要的作用。变换的输入和输出都是通过RDD。
RDD会被划分很多的分区分布到集群的多个节点中,分区是个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存存储。这是很重要的优化,以防止函数式数据不变性(immutable)导致的内存需求无限扩张。有些RDD是计算的中间结果,其分区并不一定有相应的内存或磁盘数据与之对应,如果要迭代使用数据,可以调cache()函数缓存数据。
在物理上,RDD对象实质上是一个元数据结构,存储着Block,Node等的映射关系,以及其他的元数据信息。
一个RDD就是一组分区,在物理数据存储上,RDD的每个分区对应的就是一个Block,Block可以存储到内存,当内存不够时,可以存储到磁盘中。
每个Block中存储着RDD所有数据项的一个子集,暴露给用户的可以是一个Block的迭代器(例如:用户可以通过mapPartitions获得分区迭代器进行操作),也可以就是一个数据项(例如:通过map函数对每个数据项并行计算)。
在Spark的执行过程中,RDD经历了一个个的Transformation算子后,最后通过Action算子进行触发操作。
逻辑上每经历一次变换,就会将RDD转换成为一个新的RDD,RDD之间通过Lineage产生依赖关系,这个关系在容错中有很重要的作用。变换的输入和输出都是通过RDD。
RDD会被划分很多的分区分布到集群的多个节点中,分区是个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存存储。这是很重要的优化,以防止函数式数据不变性(immutable)导致的内存需求无限扩张。有些RDD是计算的中间结果,其分区并不一定有相应的内存或磁盘数据与之对应,如果要迭代使用数据,可以调cache()函数缓存数据。
在物理上,RDD对象实质上是一个元数据结构,存储着Block,Node等的映射关系,以及其他的元数据信息。
一个RDD就是一组分区,在物理数据存储上,RDD的每个分区对应的就是一个Block,Block可以存储到内存,当内存不够时,可以存储到磁盘中。
每个Block中存储着RDD所有数据项的一个子集,暴露给用户的可以是一个Block的迭代器(例如:用户可以通过mapPartitions获得分区迭代器进行操作),也可以就是一个数据项(例如:通过map函数对每个数据项并行计算)。
相关文章推荐
- 字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略
- 第11周 —— 教师兼干部类
- pcre.h: No such file or directory
- VS2010安装MSDN(转载)
- linux中的sed
- linux中的awk
- Petya and Countryside(子序列问题)
- 揭秘微信红包架构、抢红包算法和高并发和降级方案
- L2-006. 树的遍历(利用后序中序还原二叉树)
- 5分钟打造Android一键退出功能
- java枚举
- SQL Azure (17) SQL Azure V12 - 跨数据中心标准地域复制(Standard Geo-Replication)
- 第11周—— 存储班长信息的学生类
- 新的开始!!!!!
- Pyqt 浏览器截图小demo
- 1019 of dp
- 构建集群的基础理论
- 学习进度博客十一
- 解决 an app id with identifier is not available. please enter a different string. xcode 7.3
- 实验一质量属性报告