Spark引擎中RDD的性质

RDD(Resilient Distributed Dataset,弹性分布式数据集)是SparkCore提供的核心抽象。一个RDD在逻辑上抽象地代表了一个HDFS文件或数据库中的表,但RDD是被分区的,每个分区分布在不同的节点上,从而并行执行。

RDD算子包括:

  • 转换算子:也叫计算,有flatmap、map等;
  • 缓存算子:这个有的不叫算子,叫持久化,使用cache方法;
  • 行动算子:有collect等。RDD是懒执行的,没有行动算子,前面的所有算子不会执行(但是会加载进来,加载也会执行其中的代码,例如打印代码)。
  • 输出算子:如saveAsFile等。

Spark中对于一个RDD执行多次算子的默认原理是:每次你对一个RDD执行一个算子操作时,都会重新从源头处计算一遍,计算出那个RDD来,然后再对这个RDD执行你的算子操作。例如:A->B->C->D,然后如果需要C->E就需要A->B->C->E这一套计算,这种方式的性能是很差的。如果C重复使用可以做持久化,也就是做缓存算子。

RDD通常通过HDFS文件或Hive表创建,也可以通过数据库表或应用程序的集合(例如Scala代码)来创建。

RDD的性质如下:

  • 不可变性:每经过一次算子生成一个新的RDD,不是对之前的做改变,RDD理解成逻辑的概念;
  • 可分区性:类似MapReduce中多个Map任务并行度,有默认分区也可自定义(根据集群性能来确定分区);
  • 弹性:包括:
    1. 存储弹性:内存与磁盘的自动切换,RDD默认存放在内存中,但内存容量不足时,Spark会自动将RDD数据写入磁盘,用户不用去管这些,也就是对用户透明。这就是RDD的弹性;
    2. 容错的弹性:数据丢失可自动恢复,RDD的一套算子是一个血统,也就是血统关系,知道每个算子的位置。假如一个节点的RDD Partition失败或宕掉,RDD会通过数据来源重新计算该Partition,这对使用者是透明的);
    3. 计算的弹性:计算出错重试机制;
    4. 分片弹性:根据需求重新分片,即分区。

总之,RDD 是一个 分布式、不可变、带血统的对象集合,支持 延迟计算 和 容错恢复,是 Spark 高层抽象的基础。

相关推荐
用户3610588626122 天前
Spark 核心之二次排序、分组取 TopN 优化分析
大数据·spark
头茬韭菜3 天前
Apache Fluss 项目深度分析与技术文档系列计划
flink·spark·realtime·fluss
lingran__3 天前
C++ STL 关联式容器万字详解:set、multiset、map、multimap|接口用法 + 易错点 + 力扣真题实战
开发语言·c++·stl·set·map·红黑树·关联式容器
Gent_倪4 天前
Spark聚合算法:HashAggregate与SortAggregate详解
大数据·spark
用户3610588626125 天前
Spark 核心之任务调度角色划分以及资源调度角色划分详解
大数据·spark
用户3610588626125 天前
Spark 核心之 Stage 并行度划分及优化详解
spark
用户3610588626126 天前
Spark 核心之 Stage 切分划分与计算模式详解
spark
用户3610588626126 天前
Spark 核心之 RDD 窄依赖与宽依赖详解
spark
用户3610588626127 天前
Spark 核心之 Stage 和 Task 原理剖析
spark
java1234_小锋7 天前
【免费】基于Spark实时医疗健康数据监测与疾病预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·实时医疗健康数据监测·实时疾病预测系统