對于大數據來說,hadoop與spark無疑是兩大重要的組成架構。中培偉業《大數據平臺搭建與高性能計算最佳實踐》培訓專家鐘老師指出,hadoop與spark作為大數據的兩大架構系統,二者有著競爭與承前啟后的關系。對于二者之間的區別以及后期的發展趨勢,鐘老師給出了自己的看法。
首先,spark對于海量數據計算,尤其是迭代運算,圖計算運算速度相比與hadoop有著量級上的增長。spark計算的時候將原始數據及中間結果都存儲在內存中,而hadoop每輪迭代都要講原始數據讀入,中間結果寫出到硬盤上。這樣一來由于spark省去了IO的時間,所以相比于hadoop,其運算速率有這量級上的增長。
其次,spark的容錯性很好,spark將海量數據抽象成RDD這種數據結構,并且其存在兩種算子,一種叫transformation,主要是用于對RDD進行數據轉換,一種叫action,是要將轉換好的RDD再轉換成原始數據。
spark運算是一種懶惰運算,其程序執行邏輯是,對于一系列transformation算子,在遇到action算子之前,這些transformation是不會執行的,而會生成一個運算邏輯圖,當遇到一個action算子的時候,才根據前面的運算邏輯圖執行程序。這樣如果有臺機器宕機了之后,只需要根據邏輯圖將宕機中的RDD進行重新計算就可以了(窄依賴的情況下,寬依賴的情況下計算代價要更高。)
同時,spark與HDFS、Yarn/Mesos以及pregel有著很好的兼容性。但是畢竟spark起步晚,在性能、穩定性方面還有待提高;同時spark不能很好的處理細粒度、異步的數據。
Hadoop,性質和Spark并不一樣,它不僅僅是一個框架,而致力于發展成一個分布式計算的平臺。所以,現在的Spark是可以運行在YARNYet another Resource Negotiator)上的,而其他的一些框架也可以運行在這個平臺上,達到資源共享的目的。
spark相對hadoop編程模型簡單,能進行迭代操作,利用內存(甚至是堆外內存)緩存數據,能進行流水線優化,上層封裝了sql、streaming、mlib、graphx等或成熟或不成熟的框架,明顯有取hadoop而代之的傾向。
1. 相同的算法,Spark比Hadoop快數倍,如果是一些迭代或者要對數據反復讀取的算法,Spark比Hadoop快數十倍至上百倍
2. Spark對于數據的操作種類更多,對于一些比較特殊的計算需求,比如求兩個集合的交集并集,Spark都有函數直接計算,而Hadoop實現這樣的計算無比繁瑣
3. Spark的開發效率比Hadoop高很多
最后,鐘老師對二者的發展趨勢進行了展望,他認為雖然Spark目前還不夠成熟,但其無疑代表著未來。