Spark系列:Spark为什么比Hadoop快

Posted CodingTheFuture

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark系列:Spark为什么比Hadoop快相关的知识,希望对你有一定的参考价值。

1.前言

大数据工程师都喜欢拿Spark和Hadoop进行对比。一般的理解就是:Spark是基于内存的计算,而Hadoop是基于磁盘的计算;Spark是一种内存计算技术。


果真如此吗?事实上,不光Spark是内存计算,Hadoop其实也是内存计算。Spark和Hadoop的根本差异是多个任务之间的数据通信问题:Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。


Spark SQL比Hadoop Hive快,是有一定条件的,而且不是Spark SQL的引擎一定比Hive的引擎快,相反,Hive的HQL引擎还比Spark SQL的引擎更快。


2.什么是内存计算技术?

我们说的内存计算技术是指将数据持久化至内存RAM中进行加工处理的技术。Spark并不支持将数据持久化至内存中,我们通常所说的是spark的数据缓存技术,如将RDD数据缓存至内存,但并没有实现持久化。缓存数据是可以擦除的,擦除后同样是需要我们重新计算的。Spark的数据处理是在内存中进行的,这话并没有错,其实当前的所有操作系统的数据处理都是在内存中进行的。所以,这内存计算并不是Spark的特性。


Spark是允许我们利用缓存技术和LRU算法缓存数据的。Spark的所有运算并不是全部都在内存中,当shuffle发生的时候,数据同样是需要写入磁盘的。所以,Spark并不是基于内存的技术,而是使用了缓存机制的技术。


3. 那Spark主要快在哪里呢?

Spark最引以为豪的就是官网介绍的经典案例。这个案例是逻辑回归机器学习算法,该算法主要特征是对同一份数据的反复迭代运算。Spark是内存缓存,所以数据只加载一次,Hadoop则需要反复加载。实际情况下,Spark通常比Hadoop快十倍以内是合理的。主要快在哪里呢?


其实,关键还是在于Spark 本身快。


Spark比Hadoop快的主要原因有:


1.消除了冗余的HDFS读写

Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。


2.消除了冗余的MapReduce阶段

Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。而Spark基于RDD提供了丰富的算子操作,且reduce操作产生shuffle数据,可以缓存在内存中。


3.JVM的优化

Spark Task的启动时间快。Spark采用fork线程的方式,Spark每次MapReduce操作是基于线程的,只在启动。而Hadoop采用创建新的进程的方式,启动一个Task便会启动一次JVM。


Spark的Executor是启动一次JVM,内存的Task操作是在线程池内线程复用的。


每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。


考虑一种极端查询:


Select month_id,sum(sales) from T group by month_id;

1

这个查询只有一次shuffle操作,此时,也许Hive HQL的运行时间也许比Spark还快。


4.结论

Spark快不是绝对的,但是绝大多数,Spark都比Hadoop计算要快。这主要得益于其对mapreduce操作的优化以及对JVM使用的优化。


所以,整体而言,Spark比Hadoop的MR程序性能要高,正常在三到四倍左右,而并不是官网所说的高几百倍。



码动未来让你成为自己命运的主宰者


1. 企业级项目练习

2. 框架架构级精讲

3. 全网最细致的全栈课程讲授

4. 趣味式讲解内容轻松吸收

5. 全面的课前课后讲义-带你走向学习新巅峰

6. 拒绝讲师更换,减少适应时间,如一而往从始至终


以上是关于Spark系列:Spark为什么比Hadoop快的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spark 比 Hadoop Map Reduce 快

spark为什么比hadoop快

hadoop,storm和spark的区别,比较

hadoop,storm和spark的区别,比较

hadoop,storm和spark的区别,比较

hadoop,storm和spark的区别,比较