291294878

2018-10-22   阅读量: 710

大数据 Spark

如何理解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释放一部分,仍有重构的可能

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 6 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子