考察:Spark和Hadoop运行机制的理解,对技术应用场景的敏感性和理解程度,这对工作的具体质量有很大的影响。
Spark SQL比Hadoop Hive快,是有一定条件的,而且不是Spark SQL的引擎比Hive的引擎快,相反,Hive的HQL引擎还比Spark SQL的引擎更快。
其实,关键还是在于Spark 本身快。那么Spark为什么快呢?
消除了冗余的HDFS读写
Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。、
消除了冗余的MapReduce阶段
Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。而Spark基于RDD提供了丰富的算子操作,且action操作产生shuffle数据,可以缓存在内存中。
JVM的优化
Hadoop每次MapReduce操作,启动一个Task便会启动一次JVM,基于进程的操作。而Spark每次MapReduce操作是基于线程的,只在启动Executor时启动一次JVM,内存的Task操作是在线程复用的。
每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。
总结:Spark比Mapreduce运行更快,主要得益于其对mapreduce操作的优化以及对JVM使用的优化。
拓展延伸:
Spark快不是绝对的,但是绝大多数Spark都比Hadoop计算要快。
考虑一种极端查询:Select month_id,sum(sales) from T group by month_id;这个查询只有一次shuffle操作,此时,也许Hive HQL的运行时间也许比Spark还快。
结合项目中使用
公司在技术人员储备满足的情况下,同样的业务处理,优先选择spark来进行实现,这样对统计分析的执行效率会有很大的提升。
如果业务对性能没有要求,而且内存资源有限,也可以采用Hive来进行计算分析。