1. 程式人生 > >白話大資料 | Spark和Hadoop到底誰更厲害?

白話大資料 | Spark和Hadoop到底誰更厲害?

要想搞清楚spark跟Hadoop到底誰更厲害,首先得明白spark到底是什麼鬼。

經過之前的介紹大家應該非常瞭解什麼是Hadoop了(不瞭解的點選這裡:白話大資料 | hadoop究竟是什麼鬼),簡單的說:Hadoop是由HDFS分散式檔案系統和MapReduce程式設計模型等部分組成的分散式系統架構。

而Spark呢,更像是Hadoop MapReduce這樣的程式設計模型。

其實要講清楚Spark,記憶體和磁碟這兩個概念是必須要弄清楚的,相信在座的老爺太太們都懂,我還是簡單說一下吧。記憶體和磁碟兩者都是儲存裝置, 但記憶體儲存的是我們正在使用的資源,磁碟儲存的是我們暫時用不到的資源。磁碟就像這個倉庫,而記憶體就像進出倉庫的通道,其實也不完全是這樣啦,小編主要想跟大家說的就是倉庫很大,要塞滿它很難,反觀通道很小就很容易塞滿。

Spark和MapReduce的相同之處是都不帶有磁碟檔案系統,都可以依附HDFS作為分散式(磁碟)檔案系統

所以說Spark與Hadoop並無衝突,甚至可以與Hdoop融為一體)。

不同之處挺多的,但主要是Spark有一個分散式記憶體檔案系統,可以對記憶體中的檔案進行分佈處理。那麼小編先舉一個例子讓大家看看Spark和MapReduce在處理問題方式上有什麼區別。

Mapreduce每一個步驟發生在記憶體中但產生的中間值都會儲存在磁盤裡,下一步操作時又會將這個中間值呼叫到記憶體中,如此迴圈,直到最終完成。

Spark的每個步驟也是發生在記憶體之中但產生的中間值會直接進入下一個步驟,直到所有的步驟完成之後才會將最終結果儲存進磁碟。所以在使用Spark做資料分析能少進行很多次相對沒有意義的讀寫,節省大量的時間,少數步驟可能感覺不出區別,但是步驟很多時,Spark的優勢就體現出來了。


大家可以看出來了,MapReduce就是一個穩重的媽媽,一步一步來,有條不紊。Spark就像一個急躁的媽媽,一個步驟還沒完成呢,就開始進行下一個步驟了,當然,這也要求操作檯足夠大,放得下這麼多東西。

當然,任何技術都是有得必有失的,雖然Spark很快,但Spark運作時會佔用大量計算機記憶體,而小編之前說過,記憶體空間相比於磁碟空間,那是很小很小的,這就要求使用者去購買具有較大記憶體的伺服器佈置叢集,而這樣的伺服器是很昂貴的。由於記憶體的限制,即使是用昂貴的伺服器,Spark也不能太好地處理很大批量的檔案,而這些問題都是MapReduce不用考慮的。小編記得有大神舉過很棒的例子,MapReduce就像一把大砍刀,什麼都能砍,儘管速度有點不盡人意;Spark就像一把剔骨刀,很鋒利速度很快,但具有侷限性,不能砍太大的東西。