热线电话:13121318867

登录
2018-10-22 阅读量: 919
如何理解spark核心-RDD?

Spark核心—RDD( Resilient Distributed Dataset 弹性分布式数据集模型)

1.四个特征

– RDD使用户能够显式将计算结果保存在内存中,控制数据的划分

– 记录数据的变换和描述,而不是数据本身,以保证容错

– 懒操作,延迟计算,action的时候才操作

– 瞬时性,用时才产生,用完就释放

2.四种构建方法

– 从共享文件系统中获取,如从HDFS中读数据构建RDD

• val a = sc.textFile(“/xxx/yyy/file”)

– 通过现有RDD转换得到

• val b = a.map(x => (x, 1))

– 定义一个scala数组

• val c = sc.parallelize(1 to 10, 1)

– 由一个已经存在的RDD通过持久化操作生成

• val d = a.persist(), a. saveAsHadoopFile(“/xxx/yyy/zzz”)

3.partition和依赖

– 每个RDD包含了数据分块/分区(partition)的集合,每个partition是不可分割的

– 每个partition的计算就是一个task,task是调度的基本单位

– 与父RDD的依赖关系(rddA=>rddB)

宽依赖: B的每个partition依赖于A的所有partition

• 比如groupByKey、reduceByKey、join……,由A产生B时会先对A做shuffle分桶

窄依赖: B的每个partition依赖于A的常数个partition

• 比如map、filter、union……

4.stage和依赖

– 从后往前,将宽依赖的边删掉,连通分量及其所有依赖的RDD,构成一个stage

– 每个stage内部尽可能多地包含一组具有窄依赖关系的转换,并将它们流水线并行化

5.数据局部性原则

– 如果一个任务需要的数据在某个节点的内存中,这个任务就会被分配至那个节点

– 需要的数据在某个节点的文件系统中,就分配至那个节点

6.容错性原则

– 如果此task失败,AM会重新分配task

– 如果task依赖的上层partition数据已经失效了,会先将其依赖的partition计算任务再重算一遍

• 宽依赖中被依赖partition,可以将数据保存HDFS,以便快速重构(checkpoint)

• 窄依赖只依赖上层一个partition,恢复代价较少

– 可以指定保存一个RDD的数据至节点的cache中,如果内存不够,会LRU释放一部分,仍有重构的可能

0.0000
6
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子