浅谈RDD
RDD(Resilient Distributed Datasets)弹性分布式数据集,是在集群应用中分享数据的一种高效,通用,容错的抽象,是Spark提供的最重要的抽象的概念,
它是一种有容错机制 的特殊集合,可以分布在集群的节点上,以函数式编操作集合的方式,进行各种并行操作。
RDD 是只读的,不可变的数据集。RDD也是容错的,假如其中一个RDD坏掉,RDD中有记录之前的依赖关系,依赖关系中记录算子和分区,可以重新生成。
RDD 实现分布式数据集容错方法有两种:数据检查点和记录更新。同时RDD是高效的,不需要物化。它也是分区记录的集合,可以缓存的。
每个RDD都包含有一组RDD分区(partition),数据集的原子组成部分,还有对父RDD的一组依赖,这些依赖描述了RDD的Lineage;
以及一个函数,说明在父RDD上执行何种计算;还包含元数据,描述分区模式和数据存放的位置。
RDD 之间的依赖关系分为宽依赖和窄依赖两类。对于窄依赖,子RDD的每个分区依赖于常数个父分区,
它与数据规模无关。输入输出是一对一的算子,但是其中一种方 式的结果RDD的分区结构不变,主要是map,flatMap。
但是如union,coalesce结果RDD的分区结构会发生变化。对于宽依赖,子 RDD的每个分区都依赖于所有的父RDD分区。
对于两 种依赖关系,窄依赖允许在一个集群节点上以流水线的方式(pipeline)计算所有父分区。
而宽依赖则需要首先计算好所有父分区数据,然后在节点之间进 行Shuffle。
窄依赖能够更有效地进行失效节点的恢复,重新计算丢失RDD分区的父分区,而且不同节点之间可以并行计算;
而对于一个宽依赖关系的 Lineage图,单个节点失效可能导致这个RDD的所有祖先丢失部分分区,因而需要整体重新计算。
同时RDD有五个特征,其中分区,一系列的依赖关系和函数是三个基本特征,最佳位置和分区策略是可选。RDD是移动计算而不是移动数据。
RDD和spark之间,RDD是一种具有容错性基于内存的集群计算抽象方法,Spark则是这个抽象方法的实现。
最新文章
- nyoj220 推桌子(贪心算法)
- mac下webpagetest搭建
- 深入理解Ember-Data特性(上)
- mysql 全文搜索的FULLTEXT
- Windows下的cmd命令行中设置环境编码
- Django1.9 Python3.4出现Error loading MySQLdb
- Sqlserver 树形查询
- Adding DTrace Probes to PHP Extensions
- C# 的轻量级 RPC 框架
- 组合计数(polya计数):SGU 282 Isomorphism
- 字体图标 icon font
- 转:python中函数curry化
- 网页WEB打印控件
- JavaScript 简介及语法语句
- HBase0.98使用ReplicationAdmin管理集群同步
- oracle 表所占空间统计
- SVG之Path
- 洛谷P4723 【模板】线性递推(多项式取模 线性代数)
- 修改CKplayer.js 源码解决移动端浏览器全屏不能限制快进的问题
- 2018php最新面试题之PHP核心技术