spark core RDD
所属分类 spark
浏览量 712
RDD Resilient Distributed Dataset 弹性分布式数据集
论文 《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》
RDD 提供了一个抽象的数据模型,不用关心底层数据的分布式特性,
只需将具体的应用逻辑表达为一系列转换操作(函数),
不同 RDD 之间的转换操作之间还可以形成依赖关系,进而实现管道化,
避免中间结果的存储,降低了数据复制、磁盘IO和序列化开销
Resilient 弹性的,RDD里的数据 保存在 内存 或 磁盘
Distributed 分布式存储的,支持分布式计算
Dataset 数据集
Internally, each RDD is characterized by five main properties:
A list of partitions
A function for computing each split
A list of dependencies on other RDDs
Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
分区 Partition 列表
一个个分片一个计算任务,分片数决定并行度
可在创建 RDD 时指定 分片个数 ,没有指定,采用默认值
RDD 计算 以分片为单位,compute 函数 作用在每个分区上
一个 RDD 依赖于其他多个 RDD
RDD 的每次转换都会生成一个新的 RDD,RDD 形成类似于流水线一样的前后依赖关系
部分分区数据丢失时,通过依赖关系重新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算
容错机制
KV 类型的 RDD 会有一个 Partitioner,分区函数,默认 HashPartitioner
存储存取每个 Partition 的优先位置
HDFS 文件 保存每个 Partition 所在块的位置
移动数据不如移动计算 理念,任务调度时,就近选择 worker 节点 进行任务计算
分区列表 计算函数 依赖关系 分区函数(默认hash) 最佳位置
RDD 创建方式
基于外部存储 本地文件创建
val rdd1 = sc.textFile("hdfs://node1:8020/wordcount/input/words.txt")
通过已有的 RDD , 算子转换生成新的 RDD
val rdd2=rdd1.flatMap(_.split(" "))
基于集合创建
val rdd3 = sc.parallelize(Array(1,2,3,4,5,6))
val rdd4 = sc.makeRDD(List(1,2,3,4,5,6))
makeRDD 方法底层调用 parallelize 方法
可指定分区数
val rdd = sc.makeRDD(List(1,2,3,4,5,6),2)
上一篇
下一篇
spark3 例子
Apache Pinot 分布式实时分析和存储系统
Presto简介
spark RDD saveAsTextFile
spark RDD 分组求平均例子
spark RDD 持久化 缓存