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 高层抽象的基础。

相关推荐
Irissgwe6 小时前
C++ STL关联式容器详解:set、multiset、map、multimap
开发语言·c++·stl·set·map·multiset·关联式容器
极光代码工作室10 小时前
基于数据分析的电影票房预测系统
大数据·python·数据分析·spark·数据可视化
码上有光11 小时前
map与set的使用讲解
c++·set·map·平衡二叉搜索树·关联式容器
KaMeidebaby1 天前
卡梅德生物技术快报|噬菌体文库构建实验优化及偶联体系实验数据分析
大数据·人工智能·架构·spark·新浪微博
鸿乃江边鸟1 天前
Spark中怎么做Spark canonicalize归一化
大数据·分布式·spark
张忠琳2 天前
【client-go v0.36.1】tools/cache 深度分析(下篇)— RealFIFO 深度、集成架构、生命周期、设计模式总结
云原生·kubernetes·cache·informer·client-go
ACP广源盛139246256733 天前
GSV2221 显示转换芯片@ACP#赋能 RTX Spark 端侧 AI 设备,构建多屏全模态视觉交互新生态
大数据·人工智能·嵌入式硬件·gpt·spark·电脑·音视频
张忠琳3 天前
【client-go v0.36.1】tools/cache 深度分析(中篇)— 辅助组件逐行解析
云原生·kubernetes·cache·informer·client-go
张忠琳3 天前
【client-go v0.36.1】tools/cache 深度分析(上篇)— 模块定位、整体结构、接口与依赖关系
云原生·kubernetes·cache·informer·client-go
ACP广源盛139246256733 天前
GSV2231 三屏显示扩展芯片@ACP#RTX Spark AI 终端多屏协作专属解决方案
大数据·人工智能·分布式·信息可视化·spark·电脑·音视频