前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式弹性数据集(下)

分布式弹性数据集(下)

作者头像
kk大数据
发布2019-08-14 15:35:53
3710
发布2019-08-14 15:35:53
举报
文章被收录于专栏:kk大数据kk大数据

这是kk第004篇文章

本文共1695字,阅读约9分钟

文章概述:RDD的其他几个知识点,依赖关系(Dependencies)、检查点(Checkpoint)、存储级别(Storage Level)和迭代函数(Iterator)。

依赖关系

Dependencies 是 RDD 中最重要的组件之一。

如前文所说,Spark 不需要将每个中间计算结果进行数据复制以防数据丢失,因为每一步产生的 RDD 里都会存储它的依赖关系,即它是通过哪个 RDD 经过哪个转换操作得到的。

可能你会问:父 RDD 的分区和子 RDD 的分区之间是否是一对一的对应关系呢?

Spark 支持两种依赖关系:窄依赖(Narrow Dependency) 和 宽依赖(Wide Dependency)。

窄依赖就是父 RDD 的分区可以一一对应到子 RDD 的分区,宽依赖就是父 RDD 的每个分区可以被多个子 RDD 的分区使用。

显然,窄依赖允许子 RDD 的每个分区可以被并行处理产生,而宽依赖则必须等待父 RDD 的所有分区都被计算好之后,才能开始处理。

如上图,一些转换操作,如map、filter 会产生窄依赖关系,而 join、groupByKey 则会产生宽依赖关系。

这很容易理解,因为map是将分区里的每一个元素通过计算转化为另一个元素,一个分区里的数据不会跑到两个不同的分区。

而 groupByKey 则要讲拥有所有分区里有相同 key 的元素放到同一个目标分区,而每个父分区都可能包含各种 key 的元素,所以它可能被任意一个子分区所依赖。

Spark 之所以要区分宽依赖和窄依赖是处于以下两点考虑:

(1)窄依赖可以支持在同一个节点上链式执行多条命令,例如在执行了 map 后,紧接着执行 filter 。相反,宽依赖需要所有的父分区都是可用的,可能还需要调用类似 MapReduce 之类的操作进行跨节点传递

(2)从失败恢复的角度考虑,窄依赖的失败恢复更有效,因为它只需要重新计算丢失的父分区即可,而宽依赖牵涉到 RDD 各级的多个父分区。

检查点

基于 RDD 的依赖关系,如果任意一个 RDD 在相应节点丢失,你只需要从上一步的 RDD 出发再次计算,便可恢复该 RDD。

但是,如果一个 RDD 的依赖比较长,而且中间又有多个 RDD 出现故障的话,进行恢复可能会非常耗费时间和计算资源。

而检查点(Checkpoint)的引入,就是为了优化这些情况下的数据恢复。

在计算过程中,对于一些计算过程比较耗时的 RDD,我们可以将它缓存至硬盘或 HDFS中,标记这个 RDD 有被检查点处理过,并且清空它的所有依赖关系。

同时,给它新建一个依赖于CheckpointRDD 的依赖关系,CheckpointRDD 可以用来从硬盘中读取 RDD 和生成新的分区信息。

存储级别

存储级别(Storage Level)是一个枚举类型,用来记录 RDD 持久化时的存储级别,常用的有以下几个:

MEMORY_ONLY:只缓存在内存中,如果内存空间不够则不缓存多出来的部分。这是RDD 存储级别的默认值

MEMORY_AND_DISK:缓存在内存中,如果空间不够则缓存在硬盘中。

DISK_ONLY:只缓存在硬盘中。

MEMORY_ONLY_2 和 MEMORY_AND_DISK_2 等:与上面的级别功能相同,只不过每个分区在集群中建立副本。

SPARK 相比于 HADOOP 在性能上的提升,我们可以随时把计算好的 RDD 缓存在内存中,以便下次计算时使用,这大幅度减小了硬盘读写的开销。

迭代函数

迭代函数(Iterator)和计算函数(Compute)是用来表示 RDD 怎样通过父 RDD 计算得到的。

迭代函数首先判断缓存中是否有想要计算的 RDD,如果有就直接读取,如果没有,就查找想要计算的 RDD 是否被检查点处理过。如果有,就直接读取,如果没有,就调用计算函数向上递归,查找父 RDD 进行计算。

以上,是 RDD 的基本概念,后续会陆续讲如何使用 RDD。

环境不会改变,解决之道在于改变自己。

与你共勉,加油!Bye!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KK架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档