沒有人料想得到,2009年在美國加州大學柏克萊分校一間實驗室為了驗證新系統的副產品,竟然在6、7年後影響了全世界大資料分析架構的設計。
AMPLab是柏克萊一間致力於大資料技術研究的實驗室,2009年時Hadoop已是大資料分析的首選平臺,但是Hadoop的MapReduce運算大量仰賴磁碟I/O,導致效能不彰。因此這間實驗室當時展開了許多Hadoop MapReduce的研究計畫,包括研究如何提高Hadoop執行效能以及運算資源分配更優化的作法。
研究團隊發現,只要想辦法優化Hadoop平臺的Fair Scheduler功能,就能打造出效能更高的多租戶架構叢集系統,來執行更多運算任務,從此開始投入了各種用於管理運算資源的Scheduling演算法研究,例如DRF、Delayed Scheduling等。為了實驗這些演算法,AMPLab實驗室開發了一套系統來運用這些研究成果,這套系統就是叢集管理平臺Mesos。
在Mesos主要開發公司Mesosphere中擔任分散式系統首席工程師的Timothy Chen表示,當時為了證明Mesos能夠支援大量Workload運作,因為大資料分析是一種需要大量運算資源的任務,因此AMPLab開發了Spark來測試Mesos。
2012、2013年時,隨著行動化應用和App應用普及,串流資料的分析需求崛起,但以批次處理為重的Hadoop也面臨了考驗。以記憶體式運算為主的Spark開始獲得關注,2013年AMPLab將Spark程式碼捐給Apache基金會後開始爆紅,開始有不少外部開發者加入,2014年甚至成了Apache基金會的頂級專案,如同Hadoop一樣受重視。2014年底Spark在世界排序競賽中打敗Hadoop之後,更成了新一代大資料技術的主流。截至2016年初,目前全球參與過Spark開發的貢獻者超過1千人,光是過去1年,就增加了2百多名開發人員投入,共開發了73.5萬多行程式碼,最近還剛釋出了1.6版。
Spark生態系3大類成員
Spark生態系包括了三大類技術或產品,包括了各式大資料分析應用如HIVE、mahout等,運算環境如Mesos、Docker、OpenStack,另外一類則是各種資料源技術。(圖片來源/Databricks)
比Hadoop晚4年誕生的Spark,採取了和Hadoop不一樣的架構,知意圖產品協理王耀聰表示,Spark不是為了取代Hadoop,而是可以用來取代Hadoop內的MapReduce運算引擎。也常見在Hadoop上安裝Spark,利用HDFS來儲存資料,而用Spark來進行分析。
趨勢科技研究開發部經理洪健洲表示,Spark設計具有一種泛用性,剛好將運算模組和底層架構切開,讓擅長大資料分析的社群來協助開發各種大資料分析模組,又能讓擅長叢集運算和底層架構的專家來優化底層資源管理,也因此吸引了大批開發者參與。
Timothy Chen表示,要開始上手Spark,要先了解Spark的最小邏輯單位RDD(Resilient Distributed Dataset),這是Spark最特別的設計,也是Spark大資料分析的關鍵基礎。
就像檔案系統是一種抽象概念,用來描述真正儲存在磁碟上資料的一種抽象層,透過名稱、位置、目錄等描述,讓使用者更容易管理和使用檔案資料一樣。RDD在資料分析中,也是一種資料架構上的抽象單位。
開發者可以將運算程式和過程記錄在RDD物件中,RDD也可以用來描述資料的來源,以及透過類似Log的機制來記錄每一個處理步驟的運算過程。RDD可以經過轉換或處理來產生新的RDD物件,但是RDD在運算過程,可以不用先取得資料來處理,而是可以經過多次RDD轉換後,才下達執行指令,依據RDD運算程式來處裡資料。
因為Spark可以從多個RDD轉換中,先優化中間處理過程,例如省略重複的處理動作,來提高處理速度。不用像Hadoop的MapReduce每一次計算後,都得先將結果儲存到磁碟中,再讀取來作為下一次計算之用。因此,RDD設計方式可以先在記憶體中進行大量運算,需要時才將結果存入磁碟中。如此一來,就能大幅減少磁碟I/O。
臺灣IBM軟體事業處高級資訊工程師蘇友信表示,在資料排序上,最大極限Spark可以比Hadoop快100倍。但在一般批次處理上,Spark的速度平均也是Hadoop運算的2~10倍。
透過RDD的設計,Spark主要運算可以在記憶體上完成。但也因為記憶體資料容易受到系統出錯而遺失資料。因此,RDD具備了類似Log記錄機制,可以記錄每一個運算步驟,因此,就算系統當機或出錯,導致這個RDD的計算遺失,Spark也能回溯每一個轉換運算步驟,從仍有資料的RDD開始推算出目前遺失的RDD物件,而達到不會遺失資料的效果。「這是利用記憶體式運算的一種保護機制。」Timothy Chen表示。
在記憶體中進行所有RDD運算,需要時才儲存到磁碟,還有另一個好處是,Timothy Chen表示,「這就很適合迭代式的大資料分析需求,例如像是機器學習的演算法,得透過不斷訓練的過程來建立資料模式,使用Spark的效率就遠高於MapReduce。」也因此,Spark吸引了一批從事機器學習的資料科學家們,來不斷強化Spark對機器學習計算的支援,這也成了Spark有別於其他大資料分析運算的特色之一。
除了RDD以外,洪健洲表示,另一個Spark的特色是微批次架構(Micro Batch),將每次處理的時間區隔縮短到數秒,或甚至是十分之一秒的間隔,仍然是批次處理的手法,只是每次處理的時間很短,感覺起來就像是接近即時處理的效果。
不少應用情境其實不需要真正的即時處理,洪健洲認為,0.5秒的微批次處理已經夠用。但是這樣做更大的好處是,微批次處理也是一種批次處理,可以套用批次處理同樣的程式而不用大幅重寫。「同一套程式可以套用在兩種不同的資料處理模式上,這是Spark最性感的特色。」他說。
Spark使用者和推廣者
不少跨國大型網路服務業者如Twitter、eBay、Uber、Netfix等都是Spark使用者,也有汽車業如Toyota也使用Spark來分析資料。(圖片來源/Databricks)
Spark剛釋出了1.6版,並預計開始採取3個月的小改版周期來加速發展,新版本再度提高了執行速度,甚至標榜,就算使用非原生的Python語言來開發RDD程式,也能獲得幾乎和原生開發語言Scala同樣的執行效果。
Timothy Chen表示,除了效能之外,下一個發展重點則是除錯機制的改良。例如目前有兩位貢獻者正在開發一個資料流程的視覺化工具,可以將每個階段有哪些任務、使用了哪些RDD等資訊都呈現在單一網頁上供使用者檢視。
另外也因為Spark SQL愈來愈多人使用,Spark也計畫揭露更多內部如何優化SQL處理的資訊,讓使用者可以改良自己寫的SQL語法來提高運算速度。在下一版中,甚至還計畫納入更多多租戶架構的設計,例如讓某些任務具有保證優先執行權,避免運算資源綁定在重要性較低的任務上。「才開始起飛而已,Spark決不止於現在的效能和功能,還可以有非常大的進步空間。」Timothy Chen說。