Tungsten項目和性能優(yōu)化
根據2015年Spark調查報告,91%用戶認為性能是Spark最重要的特征,因此,性能優(yōu)化始終是Spark開發(fā)中的一個重要內容。
在今年年初,我們啟動了Tungsten項目——被設計用于提高Spark內核架構的性能和健壯性的重要改進。Spark 1.5中已經提供了Tungsten的初步功能,這其中包括二進制處理(binary processing),它避免使用Java對象模型那種傳統(tǒng)二進制內存布局格式。二進制處理極大地降低了數據密集型任務處理時的垃圾回收壓力,除此之外,Tungsten還包括新的代碼生成框架,在運行時對用戶代碼中的表達式計算生成相應經過優(yōu)化的字節(jié)碼。2015年發(fā)布的四個Spark版本,我們也添加了大量能夠經過代碼生成的內置函數,例如日期和字符串處理等常見任務。
另外,數據處理性能在查詢執(zhí)行時也非常重要,Parquet已經成為Spark中最常用的數據格式,其掃描性能對許多大型應用程序的影響巨大,在Spark 1.6當中,我們引入了一種新的Parquet讀取器,該讀取器針對平滑模式(flat schemas)使用一種經過優(yōu)化的代碼路徑,在我們的基準測試當中,該新的讀取器掃描吞吐率增加了近50%。
Spark流處理
隨著物聯網的崛起,越來越多的機構正在部署各自的流處理應用程序,將這些流處理程序同傳統(tǒng)的流水線結合起來至關重要,Spark通過利用統(tǒng)一引擎進行批處理和流數據處理簡化了部署難度。2015年Spark 流處理中增加的主要內容包括:
直接Kafka連接器:Spark 1.3 改進了與Kafka間的集成,從而使得流處理程序能夠提供只執(zhí)行一次數據處理的語義并簡化操作。額外的工作提供了容錯性和保證零數據丟失。
Web UI進行監(jiān)控并幫助更好地調試應用程序:為幫助監(jiān)控和調試能夠7*24小時不間斷運行的流處理程序,Spark 1.4 引入了能夠顯示處理時間線和直方圖的新Web UI,同時也能夠詳細描述各離散Streams
狀態(tài)管理10倍提升。在Spark 1.6當中,我們重新設計了Spark流處理中的狀態(tài)管理API,新引入mapWithState API,它能夠線性地擴展更新的記錄數而非記錄總數。在大多數應用場景中能夠達到一個數量級的性能提升。
結束語
Databricks目前在Spark用戶培訓和教育方面投入巨大,在2015年,我們與加州大學伯克利分校、加州大學洛杉磯分校合作并提供兩個大規(guī)模在線開放課程。第一個課程是Apache Spark大數據處理入門,教授學生使用Spark和數據分析;第二個課程是可擴展的機器學習,教授學生使用Spark進行機器學習。這兩門課程在edX平臺上都是免費的,在我們發(fā)布此消息后,目前已經有超過125000個學生注冊,我們計算在今年完成對他們的培訓。
我們對今年與社區(qū)的共同努力所帶來的進步感到自豪,也為能夠繼承努力給Spark帶來更豐富的特性感到激動,想了解2016年的開發(fā)內容,請繼續(xù)保持對我們博客的關注。