為甚麼 Spark 發展不如 Hadoop?
一說 big data,人們往往想到 Hadoop。這固然不錯,但隨著 big data 技術的深入應用,多種類型的數據應用不斷被要求提出,一些 Hadoop 被關注的範疇開始被人們注意,相關技術也迅速獲得專業技術範疇的應用。最近半年來的 Spark 之熱就是典型例子。
Spark 是一個基於 RAM 計算的開源碼 Computer Cluster 運算系統,目的是更快速地進行數據分析。Spark 早期的核心部分代碼只有 3 萬行。Spark 提供了與 Hadoop Map/Reduce 相似的分散式運算框架,但基於 RAM 和優化設計,因此在交換式數據分析和 data mining 的 Workload 中表現不錯。
進入 2014 年以後,Spark 開源碼生態系統大幅增長,已成為 big data 範疇最活躍的開源碼項目之一。Spark 之所以有如此多的關注,原因主要是因為 Spark 具有的高性能、高靈活性、與 Hadoop 生態系統完美融合等三方面的特點。
首先,Spark 對分散的數據集進行抽樣,創新地提出 RDD(Resilient Distributed Dataset)的概念,所有的統計分析任務被翻譯成對 RDD 的基本操作組成的有向無環圖(DAG)。RDD 可以被駐留在 RAM 中,往後的任務可以直接讀取 RAM 中的數據;同時分析 DAG 中任務之間的依賴性可以把相鄰的任務合併,從而減少了大量不準確的結果輸出,極大減少了 Hard disk I/O,使
複雜數據分析任務更高效。從這個推算,如果任務夠複雜,Spark 比 Map/Reduce 快一到兩倍。
其次,Spark 是一個靈活的運算框架,適合做批次處理、工作流、交互式分析、流量處理等不同類型的應用,因此 Spark 也可以成為一個用途廣泛的運算引擎,並在未來取代 Map/Reduce 的地位。
最後,Spark 可以與 Hadoop 生態系統的很多組件互相操作。Spark 可以運行在新一代資源管理框架 YARN 上,它還可以讀取已有並存放在 Hadoop 上的數據,這是個非常大的優勢。
雖然 Spark 具有以上三大優點,但從目前 Spark 的發展和應用現狀來看,Spark 本身也存在很多缺陷,主要包括以下幾個方面:
– 穩定性方面,由於代碼質量問題,Spark 長時間運行會經常出錯,在架構方面,由於大量數據被緩存在 RAM 中,Java 回收垃圾緩慢的情況嚴重,導致 Spark 性能不穩定,在複雜場景中 SQL 的性能甚至不如現有的 Map/Reduce。
– 不能處理 big data,單獨機器處理數據過大,或者由於數據出現問題導致中間結果超過 RAM 的大小時,常常出現 RAM 空間不足或無法得出結果。然而,Map/Reduce 運算框架可以處理 big data,在這方面,Spark 不如 Map/Reduce 運算框架有效。
– 不能支持複雜的 SQL 統計;目前 Spark 支持的 SQL 語法完整程度還不能應用在複雜數據分析中。在可管理性方面,Spark YARN 的結合不完善,這就為使用過程中埋下隱憂,容易出現各種難題。
雖然 Spark 活躍在 Cloudera、MapR、Hortonworks 等眾多知名 big data 公司,但是如果 Spark 本身的缺陷得不到及時處理,將會嚴重影響 Spark 的普及和發展。