![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/8ac6e856ec9edd30146a66017d77e96b.png)
总的来说,Spark采用更先进的架构,使得灵活性、易用性、性能等方面都比Hadoop更有优势,有取代Hadoop的趋势,但其稳定性有待进一步提高。我总结,具体表现在如下几个方面。
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/90b2830226a7a38a8ac22b90cdf27a59.jpeg)
Q:Spark RDD是什么?
A:RDD是Spark的基本抽象,是一个弹性分布式数据集,代表着不可变的,分区(partition)的集合,能够进行并行计算。也即是说:
它是一系列的分片、比如说128M一片,类似于Hadoop的split;
在每个分片上都有一个函数去执行/迭代/计算它
它也是一系列的依赖,比如RDD1转换为RDD2,RDD2转换为RDD3,那么RDD2依赖于RDD1,RDD3依赖于RDD2。
对于一个Key-Value形式的RDD,可以指定一个partitioner,告诉它如何分片,常用的有hash、range
可选择指定分区最佳计算位置
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/90b2830226a7a38a8ac22b90cdf27a59.jpeg)
Q:RDD的三大Operations
A:Transformation
从原有的一个RDD进行操作创建一个新的RDD,通常是一个lazy过程,例如map(func) 、filter(func),直到有Action算子执行的时候
Action
返回给驱动program一个值,或者将计算出来的结果集导出到存储系统中,例如count() reduce(func)
Persist
将数据存储在内存中,或者存储在硬盘中
例如:cache() persist() unpersist()
合理使用persist()和cache()持久化操作能大大提高spark性能,但是其调用是有原则的,必须在transformation或者textFile后面直接调用persist()或cache(),如果先创建的RDD,然后再起一行调用这两个方法,则会报错
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/90b2830226a7a38a8ac22b90cdf27a59.jpeg)
Q:Spark和Hadoop的操作模型区别
A: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等多种。这些多种多样的数据集操作类型,给开发上层应用的用户提供了方便。
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/90b2830226a7a38a8ac22b90cdf27a59.jpeg)
Q:spark RDD有哪些特性?
A: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.可选项,数据本地性,数据位置最优
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/90b2830226a7a38a8ac22b90cdf27a59.jpeg)
Q:谈谈spark中的宽窄依赖
A:RDD和它的父RDD的关系有两种类型:窄依赖和宽依赖
宽依赖:指的是多个子RDD的Partition会依赖同一个父RDD的Partition,关系是一对多,父RDD的一个分区的数据去到子RDD的不同分区里面,会有shuffle的产生
窄依赖:指的是每一个父RDD的Partition最多被子RDD的一个partition使用,是一对一的,也就是父RDD的一个分区去到了子RDD的一个分区中,这个过程没有shuffle产生
区分的标准就是看父RDD的一个分区的数据的流向,要是流向一个partition的话就是窄依赖,否则就是宽依赖
小伙伴们冲鸭,后台留言区等着你!
关于Spark,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……
同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~
福利
1、扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
推荐阅读: