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

相关推荐
武子康9 小时前
大数据-88 Spark Super Word Count 全流程实现(Scala + MySQL)
大数据·后端·spark
计算机毕业设计木哥1 天前
计算机毕业设计选题推荐:基于Python+Django的新能源汽车数据分析系统
开发语言·hadoop·python·spark·django·课程设计
思辨共悟1 天前
python数据分析 与spark、hive数据分析对比
python·数据分析·spark
Lenskit1 天前
使用pyspark对上百亿行的hive表生成稀疏向量
python·spark-ml·spark
武子康1 天前
大数据-87 Spark 实现圆周率计算与共同好友分析:Scala 实战案例
大数据·后端·spark
BYSJMG1 天前
计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统
大数据·vue.js·hadoop·python·spark·django·课程设计
IT研究室1 天前
大数据毕业设计选题推荐-基于大数据的电商物流数据分析与可视化系统-Spark-Hadoop-Bigdata
大数据·hadoop·数据分析·spark·毕业设计·数据可视化·bigdata
渣渣盟1 天前
Spark自定义累加器实现高效WordCount
大数据·spark·scala
IT毕设梦工厂1 天前
大数据毕业设计选题推荐-基于大数据的电信客户流失数据分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·spark·毕业设计·源码·数据可视化·bigdata
XueminXu2 天前
使用Spark计算WordCount
spark·map·wordcount·flatmap·sparkcontext·单词计数·reducebykey