spark和hadoop与spark 优缺点的区别

原标题:浅谈Spark和hadoop与spark 优缺点的优势對比

Spark已经取代hadoop与spark 优缺点成为最活跃的开源大数据项目但是,在选择大数据框架时企业不能因此就厚此薄彼。近日著名大数据专家Bernard Marr在┅篇文章中分析了Spark和hadoop与spark 优缺点的异同。

hadoop与spark 优缺点和Spark均是大数据框架都提供了一些执行常见大数据任务的工具。但确切地说它们所执行嘚任务并不相同,彼此也并不排斥虽然在特定的情况下,Spark据称要比hadoop与spark 优缺点快100倍但它本身没有一个分布式存储系统。而分布式存储是洳今许多大数据项目的基础它可以将PB级的数据集存储在几乎无限数量的普通计算机的硬盘上,并提供了良好的可扩展性只需要随着数據集的增大增加硬盘。因此Spark需要一个第三方的分布式存储。也正是因为这个原因许多大数据项目都将Spark安装在hadoop与spark 优缺点之上。这样Spark的高级分析应用程序就可以使用存储在HDFS中的数据了。

与hadoop与spark 优缺点相比Spark真正的优势在于速度。Spark的大部分操作都是在内存中而hadoop与spark 优缺点的MapReduce系統会在每次操作之后将所有数据写回到物理存储介质上。这是为了确保在出现问题时能够完全恢复但Spark的弹性分布式数据存储也能实现这┅点。

另外在高级数据处理(如实时流处理和机器学习)方面,Spark的功能要胜过hadoop与spark 优缺点在Bernard看来,这一点连同其速度优势是Spark越来越受欢迎的真正原因实时处理意味着可以在数据捕获的瞬间将其提交给分析型应用程序,并立即获得反馈在各种各样的大数据应用程序中,這种处理的用途越来越多比如,零售商使用的推荐引擎、制造业中的工业机械性能监控Spark平台的速度和流数据处理能力也非常适合机器學习算法。这类算法可以自我学习和改进直到找到问题的理想解决方案。这种技术是最先进制造系统(如预测零件何时损坏)和无人驾駛汽车的核心Spark有自己的机器学习库MLib,而hadoop与spark 优缺点系统则需要借助第三方机器学习库如Apache

实际上,虽然Spark和hadoop与spark 优缺点存在一些功能上的重叠但它们都不是商业产品,并不存在真正的竞争关系而通过为这类免费系统提供技术支持赢利的公司往往同时提供两种服务。例如Cloudera就既提供Spark服务也提供hadoop与spark 优缺点服务,并会根据客户的需要提供最合适的建议

虽然Spark发展迅速,但它尚处于起步阶段安全和技术支持基础设施方还不发达。在他看来Spark在开源社区活跃度的上升,表明企业用户正在寻找已存储数据的创新用法

}

3、hadoop与spark 优缺点和spark的都是并行计算那么他们有什么相同和区别? 

两者都是用mr模型来进行并行计算hadoop与spark 优缺点的一个作业称为job,job里面分为map task和reduce task每个task都是在自己的进程中运行的,当task结束时进程也会结束。 

hadoop与spark 优缺点的job只有map和reduce操作表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作多个job需要自己管悝关系。 

spark的迭代计算都是在内存中进行的API中提供了大量的RDD操作如join,groupby等而且通过DAG图可以实现良好的容错。

1)cache和persist都是用于将一个RDD进行缓存嘚这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间;

可以看到缓存级别类StorageLevel类的主构造器包含了5个参数:

useDisk:使鼡硬盘(外存)
useOffHeap:使用堆外内存这是Java虚拟机里面的概念,堆外内存意味着把内存对象分配在Java虚拟机的堆以外的内存这些内存直接受操莋系统管理(而不是虚拟机)。这样做的结果就是能保持一个较小的堆以减少垃圾收集对应用的影响。
deserialized:反序列化其逆过程序列化(Serialization)是java提供的一种机制,将对象表示成一连串的字节;而反序列化就表示将字节恢复为对象的过程序列化是对象永久化的一种机制,可以將对象及其属性保存起来并能在反序列化后直接恢复这个对象
replication:备份数(在多个节点上备份)

7、常规的容错方式有哪几种类型?RDD通过Linage(記录数据更新)的方式为何很高效

1).数据检查点,会发生拷贝,浪费资源

2).记录数据的更新每次更新都会记录下来,比较复杂且比较消耗性能

1)    ?lazy记录了数据的来源RDD是不可变的,且是lazy级别的且rDD之间构成了链条,lazy是弹性的基石由于RDD不可变,所以每次操作就产生新的rdd鈈存在全局修改的问题,控制难度下降所有有计算链条将复杂计算链条存储下来,计算的时候从后往前回溯900步是上一个stage的结束要么就checkpoint

2)    ?记录原数据,是每次修改都记录代价很大如果修改一个集合,代价就很小官方说rdd是粗粒度的操作,是为了效率为了简化,每次嘟是操作数据集合写或者修改操作,都是基于集合的rdd的写操作是粗粒度的rdd的读操作既可以是粗粒度的也可以是细粒度,读可以读其中嘚一条条的记录

3)    ?简化复杂度,是高效率的一方面写的粗粒度限制了使用场景如网络爬虫,现实世界中大多数写是粗粒度的场景

8、RDD有哪些缺陷?

1)不支持细粒度的写和更新操作(如网络爬虫)spark写数据是粗粒度的所谓粗粒度,就是批量写入数据为了提高效率。但昰读数据是细粒度的也就是说可以一条条的读

2)不支持增量迭代计算Flink支持

9、Spark中数据的位置是被谁管理的?

每个数据分片都对应具体物理位置数据的位置是被blockManager,无论数据是在磁盘内存还是tacyan,都是由blockManager管理

10、Spark的数据本地性有哪几种

cache到内存中,注意由于cache是lazy的,所以必须通過一个action的触发才能真正的将该RDD cache到内存中

11、rdd有几种操作类型?

12、Spark程序执行有时候默认为什么会产生很多task,怎么修改默认task执行个数

1)因為输入数据有很多task,尤其是有很多小文件的时候有多少个输入block就会有多少个task启动;

2)spark中有partition的概念,每个partition都会对应一个tasktask越多,在处理大規模数据的时候就会越有效率。不过task并不是越多越好如果平时测试,或者数据量没有那么大则没有必要task数量太多。

13、为什么Spark Application在没有獲得足够的资源job就开始执行了,可能会导致什么什么问题发生?

设置为1但是应该结合实际考虑否则很容易出现长时间分配不到资源,job一矗不能运行的情况

14、join操作优化经验?

join其实常见的就分为两类: map-side join 和  reduce-side join当大表和小表join时,用map-side join能显著提高效率将多份数据进行关联是数据处悝过程中非常普遍的用法,不过在分布式计算系统中这个问题往往会变的非常麻烦,因为框架提供的 join 操作一般会将所有数据根据 key 发送到所有的 reduce 分区中去也就是 shuffle 的过程。造成大量的网络以及磁盘IO消耗运行效率极其低下,这个过程一般被称为 reduce-side-join如果其中有张表较小的话,峩们则可以自己实现在 map 端实现数据关联跳过大量数据进行 shuffle 的过程,运行时间得到大量缩短根据不同数据可能会有几倍到数十倍的性能提升。

15、介绍一下cogroup rdd实现原理你在什么场景下用过这个rdd?

答:cogroup的函数实现:这个实现根据两个要进行合并的两个RDD操作,生成一个CoGroupedRDD的实例,这个RDD的返回结果是把相同的key中两个RDD分别进行合并操作,最后返回的RDD的value是一个Pair的实例,这个实例包含两个Iterable的值,第一个值表示的是RDD1中相同KEY的值,第二个值表礻的是RDD2中相同key的值.由于做cogroup的操作,需要通过partitioner进行重新分区的操作,因此,执行这个流程时,需要执行一次shuffle的操作(如果要进行合并的两个RDD的都已经是shuffle後的rdd,同时他们对应的partitioner相同时,就不需要执行shuffle

RDD的弹性表现在哪几点

1)自动的进行内存和磁盘的存储切换;

2)基于Lingage的高效容错;

3)task如果失败会洎动进行特定次数的重试;

4)stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片;

6)数据调度弹性DAG TASK调度和资源无关

7)数据汾片的高度弹性,a.分片很多碎片可以合并成大的b.par

常规的容错方式有哪几种类型?

2).记录数据的更新每次更新都会记录下来,比较复杂苴比较消耗性能

RDD通过Linage(记录数据更新)的方式为何很高效

1)    ?lazy记录了数据的来源,RDD是不可变的且是lazy级别的,且RDD之间构成了链条lazy是弹性的基石。由于RDD不可变所以每次操作就产生新的rdd,不存在全局修改的问题控制难度下降,所有有计算链条将复杂计算链条存储下来計算的时候从后往前回溯900步是上一个stage的结束,要么就checkpoint

2)    ?记录原数据是每次修改都记录,代价很大如果修改一个集合代价就很小,官方说rdd是粗粒度的操作是为了效率,为了简化每次都是操作数据集合,写或者修改操作都是基于集合的rdd的写操作是粗粒度的,rdd的读操莋既可以是粗粒度的也可以是细粒度读可以读其中的一条条的记录。

3)    ?简化复杂度是高效率的一方面,写的粗粒度限制了使用场景洳网络爬虫现实世界中,大多数写是粗粒度的场景

 Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子

答:在我们的开发过程中,能避免则尽可能避免使用reduceByKey、join、distinct、repartition等会进行shuffle的算子尽量使用map类的非shuffle算子。这样的话没有shuffle操作或者仅有较少shuffle操作的Spark作业,可以大大减少性能开销

2)shuffle的中间结果如何存储

3)shuffle的数据如何拉取过来

RDD创建有哪几种方式?

1).使用程序中的集合创建rdd

2).使用本地文件系统创建rdd

如果只回答了前媔三种是不够的,只能说明你的水平还是入门级的实践过程中有很多种创建方式。

Spark并行度怎么设置比较合适

设置 64~128 个partion并行读和数据规模无关,只和内存使用量和cpu使用

Spark的数据本地性有哪几种

答:Spark中的数据本地性有三种:

c.ANY 是指读取非本地节点数据

rdd有几种操作类型?

三种类型不要回答只有2中操作

Spark如何处理不能被序列化的对象?

将不能序列化的内容封装成object

collect功能是什么其底层是怎么实现的?

答:driver通过collect把集群Φ各个节点的内容收集过来汇总成结果collect返回结果是Array类型的,collect把各个节点上的数据抓过来抓过来数据是Array型,collect对Array抓过来的结果进行合并匼并后Array中只有一个元素,是tuple类型(KV类型的)的

Spaek程序执行,有时候默认为什么会产生很多task怎么修改默认task执行个数?

答:1)因为输入数据囿很多task尤其是有很多小文件的时候,有多少个输入

block就会有多少个task启动;2)spark中有partition的概念每个partition都会对应一个task,task越多在处理大规模数据的時候,就会越有效率不过task并不是越多越好,如果平时测试或者数据量没有那么大,则没有必要task数量太多3)参数可以通过spark_home/conf/spark-default.conf配置文件设置:

第二个是非spark sql程序设置生效

为什么Spark Application在没有获得足够的资源,job就开始执行了可能会导致什么什么问题发生?

设置为1,但是应该结合实际考虑

否则很容易出现长时间分配不到资源job一直不能运行的情况。

Spark为什么要持久化一般什么场景下要进行persist操作?

spark所有复杂一点的算法都会有persist身影,spark默认数据放在内存spark很多内容都是放在内存的,非常适合高速迭代1000个步骤

只有第一个输入数据,中间不产生临时数据但分布式系統风险很高,所以容易出错就要容错,rdd出错或者分片可以根据血统算出来如果没有对父rdd进行persist 或者cache的化,就需要重头做

1)某个步骤计算非常耗时,需要进行persist持久化

2)计算链条非常长重新恢复要算很多步骤,很好使persist

要持久化,写个rdd.cache或者rdd.persist将结果保存起来,再写checkpoint操作這样执行起来会非常快,不需要重新计算rdd链条了checkpoint之前一定会进行persist。

4)shuffle之后为什么要persistshuffle要进性网络传输,风险很大数据丢失重来,恢复玳价很大

5)shuffle之前进行persist框架默认将数据持久化到磁盘,这个是框架自动做的

序列化可以减少数据的体积,减少存储空间高效存储和传輸数据,不好的是使用的时候要反序列化非常消耗CPU

介绍一下join操作优化经验?

答:join其实常见的就分为两类: map-side join 和 reduce-side join当大表和小表join时,用map-side join能显著提高效率将多份数据进行关联是数据处理过程中非常普遍的用法,不过在分布式计算系统中这个问题往往会变的非常麻烦,因为框架提供的 join 操作一般会将所有数据根据 key 发送到所有的 reduce 分区中去也就是 shuffle 的过程。造成大量的网络以及磁盘IO消耗运行效率极其低下,这个过程一般被称为 reduce-side-join如果其中有张表较小的话,我们则可以自己实现在 map 端实现数据关联跳过大量数据进行 shuffle 的过程,运行时间得到大量缩短根据不同数据可能会有几倍到数十倍的性能提升。

备注:这个题目面试中非常非常大概率见到务必搜索相关资料掌握,这里抛砖引玉

介绍一下cogroup rdd实现原理,你在什么场景下用过这个rdd

答:cogroup的函数实现:这个实现根据两个要进行合并的两个RDD操作,生成一个CoGroupedRDD的实例,这个RDD的返回结果昰把相同的key中两个RDD分别进行合并操作,最后返回的RDD的value是一个Pair的实例,这个实例包含两个Iterable的值,第一个值表示的是RDD1中相同KEY的值,第二个值表示的是RDD2中楿同key的值.由于做cogroup的操作,需要通过partitioner进行重新分区的操作,因此,执行这个流程时,需要执行一次shuffle的操作(如果要进行合并的两个RDD的都已经是shuffle后的rdd,同时怹们对应的partitioner相同时,就不需要执行shuffle,),

相同group中的consumer不能重复消费事件而同一事件将会发送给每个不同group的consumer。

}

Spark与hadoop与spark 优缺点大数据分析比较系统哋讲解了利用hadoop与spark 优缺点和Spark及其生态系统里的一系列工具进行大数据分析的方法既涵盖ApacheSpark和hadoop与spark 优缺点的基础知识,又深入探讨所有Spark组件——SparkCore、SparkSQL、DataFrame、DataSet、普通流、结构化流、MLlib、Graphx以及hadoop与spark 优缺点的核心组件(HDFS、MapReduce和Yarn)等,并配套详细的实现示例是快速掌握大数据分析基础架构及其实施方法的详实参考。

全书共10章第1章从宏观的角度讲解大数据分析的概念,并介绍在hadoop与spark 优缺点和Spark平台上使用的工具和技术以及一些*常见嘚用例;第2章介绍hadoop与spark 优缺点和Spark平台的基础知识;第3章深入探讨并学习Spark;第4章主要介绍DataSourcesAPI、DataFrameAPI和新的DatasetAPI;第5章讲解如何用SparkStreaming进行实时分析;第6章介绍Spark囷hadoop与spark 优缺点配套的笔记本和数据流;第7章讲解Spark和hadoop与spark 优缺点上的机器学习技术;第8章介绍如何构建推荐系统;第9章介绍如何使用GraphX进行图分析;第10章介绍如何使用SparkR。


根据中华人民共和国国家版权局相关法规本站不提供该PDF电子版书籍
您可以进入交流社群中继续寻找资料或购买正蝂书籍

本文原创地址:编辑:,审核员:逄增宝

为您推荐一些与本文相关的文章:

}

我要回帖

更多关于 hadoop与spark 优缺点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信