Spark SQL比Hadoop Hive快,是有一定條件的,而且不是Spark SQL的引擎比Hive的引擎快,相反,Hive的HQL引擎還比Spark SQL的引擎更快。
其實,關鍵還是在于Spark 本身快。
Spark為什么快?
1、消除了冗余的HDFS讀寫
Hadoop每次shuffle操作后,必須寫到磁盤,而Spark在shuffle后不一定落盤,可以cache到內存中,以便迭代時使用。如果操作復雜,
很多的shufle操作,那么Hadoop的讀寫IO時間會大大增加。
2、消除了冗余的MapReduce階段
Hadoop的shuffle操作一定連著完整的MapReduce操作,冗余繁瑣。而Spark基于RDD提供了豐富的算子操作,且reduce操作產生shuffle
數據,可以緩存在內存中。
3、JVM的優化
Hadoop每次MapReduce操作,啟動一個Task便會啟動一次JVM,基于進程的操作。而Spark每次MapReduce操作是基于線程的,只在啟動
Executor是啟動一次JVM,內存的Task操作是在線程復用的。
每次啟動JVM的時間可能就需要幾秒甚至十幾秒,那么當Task多了,這個時間Hadoop不知道比Spark慢了多少。
考慮一種極端查詢:Select month_id,sum(sales) from T group by month_id;
這個查詢只有一次shuffle操作,此時,也許Hive HQL的運行時間也許比Spark還快。
結論:Spark快不是絕對的,但是絕大多數,Spark都比Hadoop計算要快。這主要得益于其對mapreduce操作的優化以及對JVM使用的優化。