持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
前言
RDD是spark最基础的概念,相信用过spark的同学一听就知道了。但spark发展到现在,RDD渐渐淡出我们的视野了,取而代之的是清一色的Dataframe了。那么我们还有必要去熟悉RDD吗?本文给你答案。
为何要熟悉RDD
RDD是spark对于分布式数据模型的抽象,spark的核心组件比如DAG都由RDD衍生而来。如果你用过sparkUI监控任务,就能发现很多RDD的存在。 可以这么说,熟悉RDD,可以帮助你更好的了解spark原理。但若你不熟悉RDD,对它的概念和细节云里雾里,在开发过程中,出现性能隐患的概率会大大增加。
RDD的4大属性
RDD有4大属性,我们要记住,分别是partitions、partitioner、dependencies、compute。下面分别解释下这几个属性:
- partitions 属性对应的是RDD 分布式数据所有的数据分片;
- partitioner 属性对应的是划分数据分片的分区规则,比如按区间划分。
- dependencies 属性记录了生成 RDD 所需的依赖。
- compute 方法封装了从父 RDD 到当前 RDD 转换的计算逻辑。
partitions很好理解,就是数据分片。spark说到底是运用集群的多个服务器来运算的,因此数据也是分布在各个地方。而partitioner就是定义如何划分分区,我们工作中用到最多的有按日期划分,比如订单归档都按天来做分区。 partitions 和 partitioner 属性描述的是RDD在跨节点方向上的横向扩展,也叫横向属性。
dependencies也就是依赖,RDD的生成需要依赖某些数据源或者RDD,而compute就是RDD之间的计算规则了。 不同的RDD通过dependencies和compute连接在一起,最后构建成了有向无环图,也就是大家熟知的DAG。 dependencies 属性和 compute 属性负责 RDD 在纵深方向上的延展,也叫纵向属性。
总结来说,RDD的4大属性分为横向属性和纵向属性。横向属性规定了数据分片是如何在集群中分布的,而纵向属性是用于RDD之间的连接,构建成DAG。
小结
熟悉RDD的4大属性,有助于我们了解RDD背后的原理。我们在开发中,经常要用到sparkUI来排查问题。而DAG是我们必看的排查组件,DAG则是由不同的RDD组成,了解它们能更快的定位问题及解决问题。