概述
1. 消除了冗余的HDFS读写
Hadoop的每次shuffle都必须写到磁盘中,而Spark的shuffle不一定写到磁盘中,而是可以缓存到内存中,以便后续的其他迭代操作时直接使用。这样一来,如果任务复杂,需要很多次的shuffle才能完成,那么Hadoop读写磁盘文件时花费在IO上的时间就会大大增加。
2. 消除了冗余的MapReduce阶段
Hadoop的每次shuffle必将连接着一次完成MapReduce操作,而Spark基于RDD提供了丰富的算子操作,而且Spark的shuffle产生的数据可以缓存到内存中。
3.Spark对于JVM的优化
Hadoop的每次MapReduce操作,启动一个Task便会启动一次JVM,是基于进程的操作。而Spark的是基于线程的操作,只在启动Executor时启动一次JVM。每次执行一个Task,都是复用Executor中的线程(Executor中维护着一个线程池)。JVM的每次启动,都将会花费几秒甚至是十几秒的时间,如果Task多了,基于进程的Hadoop Task便会频繁的启动JVM,也就花费了大量启动JVM的时间。
但是,像select month_id,sum(salas) from T group by month_id
这样的查询,只发生了一次shuffle操作(group by),Spark需要创建线程池,此时,Hive HQL的运行时间也许比Spark还要块。
结论:Spark快并不是绝地的,在某些情况下,也有MapReduce比Spark快的情况。主要得益与Spark对MapReduce操作的优化以及对JVM使用的优化。
文章参考:https://www.jianshu.com/p/6ca1421b3c47
最后
以上就是无限小刺猬为你收集整理的总结Spark比Hadoop快的原因的全部内容,希望文章能够帮你解决总结Spark比Hadoop快的原因所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复