35

面试必备 | 谈谈Spark的RDD、宽窄依赖

 4 years ago
source link: https://www.tuicool.com/articles/jAzEbe3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

戳蓝字“ 大数据手稿笔记 ”关注我们哦!

文转自: CSDN云计算

的来说,Spark采用更先进的架构,使得灵活性、易用性、性能等方面都比Hadoop更有优势,有取代Hadoop的趋势,但其稳定性有待进一步提高。 我总结,具体表现在如下几个方面。

Q1: Spark RDD 是什么?

RDD是Spark的基本抽象,是一个弹性分布式数据集,代表着不可变的,分区(partition)的集合,能够进行并行计算。 也即是说: 它是一系列的分片、比如说128M一片,类似于Hadoop的s plit; 在每个分片上都有一个函数去执行/迭代/计算它。

它也是一系列的依赖,比如RDD1转换为RDD2,RDD2转换为RDD3,那么RDD2依赖于RDD1,RDD3依赖于RDD2。

对于一个Key-Value形式的RDD,可以指定一个partitioner,告诉它如何分片,常用的有hash、range。 可选择指定分区最佳计算位置。

Q2: RDD的 三大Operations

1、Transformation

从原有的一个RDD进行操作创建一个新的RDD,通常是一个lazy过程,例如map(func) 、filter(func),直到有Action算子执行的时候

2、Action 

返回给驱动program一个值,或者将计算出来的结果集导出到存储系统中,例如count() reduce(func)

3、Persist 

将数据存储在内存中,或者存储在硬盘中, 例如: cache() persist() unpersist() 

合理使用persist()和cache()持久化操作能大大提高spark性能,但是其调用是有原则的,必须在transformation或者textFile后面直接调用persist()或 cache(),如果先创建的RDD,然后再起一行调用这两个方法,则会报错。

Q3: Spark和Hadoop的操作模型区别

Hadoop: 只提供了Map和Reduce两种操作所有的作业都得转换成Map和Reduce的操作。

Spark: 提供很多种的数据集操作类型比如Transformations 包括map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues,sort,partionBy等多种操作类型,还提供actions操作包括 Count,collect, reduce, lookup, save等多种。 这些多种多样的数据集操作类型,给开发上层应用的用户提供了方便。

Q4: Spark RDD有哪些特性?

1、A list of partitions: 一个分区列表,RDD中的数据都存储在一个分区列表中。

2、A function for computing each split: 作用在每一个分区中的函数。

3、A list of dependencies on other RDDs: 一个RDD依赖于其他多个RDD,这个点很重要,RDD的容错机制就是依据这个特性而来的。

4、Optionally,a Partitioner for key-value RDDs(eg:to say that the RDD is hash-partitioned): 可选的,针对于kv类型的RDD才有这个特性,作用是决 定了数据的来源以及数据处理后的去向。

5、可选项,数据本地性,数据位置最优。

Q5: 谈谈Spark中的宽窄依赖

RDD和它的父RDD的关系有两种类型: 窄依赖和宽依赖。

宽依赖: 指的是多个子RDD的Partition会依赖同一个父RDD的Partition,关系是一对多,父RDD的一个分区的数据去到子RDD的不同分区里面,会有Shuffle的产生。

窄依赖: 指的是每一个父RDD的Partition最多被子RDD的一个Partition使用,是一对一的,也就是父RDD的一个分区去到了子RDD的一个分区中,这个过程没有Shuffle产生。

区分的标准就是看父RDD的一个分区的数据的流向,要是流向一个Partition的话就是窄依赖,否则就是宽依赖。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK