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