Spark面试题(2)

面试题1:Spark中谈谈你对RDD的理解?

(1)RDD:Resilient Distributed Datasets(弹性分布式数据集),首先说说RDD的作用,它的出现大大降低了开发分布式应用程序的门槛,比如在其他框架开发分布式应用程序,你需要考虑数据的拆分,数据的隔离,节点之间的通信机制,job的调度,序列化等等。其次,RDD他是一个基础的抽象类,是不可变的,可拆分的,可并行操作的数据集合。

(2)RDD的五大特性:

1)分区列表(a list of partitions

详解:Spark中的RDD是 被分区的,每一个分区都会被计算任务(task数量=partition数量)处理,所以分区数决定了Spark的并行度,RDD的并行度默认是从父RDD穿个子RDD的。默认情况下,HDFS上一个block就是一个partition,RDD的分片数量决定了并行计算的力度,可以在创建RDD时指定RDD的分片个数(textFile(“xxx”),3),如果不指定分区数量,当RDD从集合创建时,则默认分区数量为该程序所分配到的core(一个core可以 承载2-4个分区),HDFS上的文件读取出来有多少个block就有多少个partition数量。

2)每个分区都有一个计算函数( a function for computing each split

详解:每个分区都会有计算函数,Spark的RDD的计算函数是以分片(split)为基本单位的,每个RDD都会实现compute函数,对具体的分片进行计算,因为RDD中的分片是并行的。所以计算也是并行的,这也解释了分布式计算的特性, 由于RDD具有前后依赖关系,遇到宽依赖关系,如reduceBykey等操作时候,就会划分成stage,stage内部的操作都是通过Pipeline进行的,在具体处理数据时它会通过Blockmanager来获取相关的数据,因为具体的split要从外界读数据,也要把具体的计算结果写入外界,所以用了一个管理器,具体的split都会映射成BlockManager的Block,并且split会被函数处理,函数处理的具体形式是以任务的形式进行的。                                                                                                                                        

3)依赖与其他的RDD列表(a list of dependencies on other RDDS

详解:RDD会保存它的依赖关系,这有助于提高的RDD的容错性,当一个中间的分区丢失了,它能根据依赖关系快速的恢复。

这里就出来了窄依赖(父RDD的partitions最多被子RDD使用一次)和宽依赖(父RDD的partitions最少被子RDD使用一次)的概念,宽依赖就意味着有shuffle操作,Spark中的宽依赖支持两种 Shuffle Manager,即 Hash Shuffemanager和Sortshuffemanager,前者是基于Hash的 Shuffle机制

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值