1. 程式人生 > >總結Spark比Hadoop快的原因

總結Spark比Hadoop快的原因

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使用的優化。