介紹Apache火花2.0
今天,我們很高興宣布的整體可用性Apache 2.0火花在磚上。該版本基於社區已經學到的東西在過去的兩年裏,加倍的用戶喜歡什麼和修複的痛苦點。這篇文章總結了三大themes-easier,更快,聰明包含2.0火花。我們也探索他們中的許多人在我們的更多細節選集火花2.0的內容。
兩個月前,我們推出了一個預覽版的Apache 2.0火花磚。可以看到在下麵的圖表中,10%的集群已經使用這個版本,客戶試驗新功能並給我們反饋。beplay体育app下载地址感謝這次經曆,我們興奮的第一個商業供應商支持火花2.0。
現在,讓我們深入的新在Apache 2.0火花。
簡單:ANSI SQL和流線型的api
我們自豪的火花的一件事是簡單的api,直觀的表達。火花2.0繼續這一傳統,關注兩個方麵:(1)標準SQL支持和(2)統一DataFrame /數據API。
在SQL方麵,我們明顯擴大引發的SQL支持,通過引入一個新的ANSI SQL解析器和子查詢。火花2.0可以運行所有的99 TPC-DS查詢,需要許多SQL: 2003的特性。因為SQL的主要接口之一火花,這些擴展功能大大減少移植遺留應用程序的工作。
在編程API方麵,我們有流線型的火花的API:
- Scala中的統一DataFrames和數據集/ Java:在火花2.0開始,DataFrame隻是一個類型別名數據集的行。類型的方法(如。
地圖
,過濾器
,groupByKey
(如)和無類型的方法。選擇
,groupBy
)數據集類上都是可用的。同樣,這一新的數據接口是抽象相結合用於結構化流。由於編譯時類型安全不是一個特性在Python和R,數據集的概念並不適用於這些語言api。相反,DataFrame仍是主界麵,類似於這些語言的單節點數據幀的概念。得到一個偷看的這個博客這些api背後的故事。 - SparkSession:一個新的切入點,取代SQLContext HiveContext。DataFrame API,用戶的一個共同的源引發的混亂的“上下文”。注意,老SQLContext和HiveContext類仍保持向後兼容性。
- 更簡單、更高性能蓄電池API:我們已經設計了一個新的蓄電池API有一個簡單的類型層次結構和支持基本類型的專門化。舊蓄電池API已經棄用,但保留向後兼容性
- DataFrame-based機器學習API中作為主要毫升API:2.0與火花,spark.ml包,以其“管道”API,將成為主要的機器學習API。原來的火花。mllib包保存下來,未來的發展重點是DataFrame-based API。
- 機器學習管道持久性:用戶現在可以保存和加載機器學習管道和模型在所有編程語言支持的火花。看到這篇博客為更多的細節。
- 分布式算法R:增加了對廣義線性模型的支持(GLM),樸素貝葉斯、生存回歸,和k - means R。
- 用戶定義的函數(udf) R:添加支持運行分區級別udf(斑紋和新聞出版總署)和hyper-parameter調優(拉普蘭人)。
更快:Apache火花作為編譯器
根據我們的2015年引發調查,91%的用戶認為Apache火花的性能是最重要的方麵。因此,性能優化一直專注在我們的火花的發展。在我們開始計劃貢獻2.0火花,我們問自己一個問題:火花已經很快,但我們能把它的邊界,使火花快10倍?
這個問題讓我們從根本上重新思考我們構建的方式引發的物理執行層。當你看到在現代數據引擎(例如火花或其他MPP數據庫),大多數CPU周期花在無用的工作,如製作虛擬函數調用或讀/寫中間數據CPU緩存或內存。通過減少CPU周期的數量優化性能浪費在這些無用的工作已經很長一段時間的重點現代編譯器。
火花2.0附帶第二代鎢引擎。這個引擎構建在思想與現代編譯器和MPP數據庫和它們適用於火花工作負載。主要的思想是排放優化代碼在運行時崩潰整個查詢到一個函數,消除虛擬函數調用和中間數據利用CPU寄存器。我們稱之為技術”舞台的代碼生成。”
給你一個急轉彎,我們測量過程所花費的時間(納秒)一行在一個核心的一些運營商火花1.6 vs 2.0火花。下表顯示了改善火花2.0。火花1.6還包括一個表達式中使用代碼生成技術,一些先進的商業數據庫,但正如你所看到的,許多運營商成為與舞台代碼生成快一個數量級。
原始的 | 火花1.6 | 火花2.0 |
---|---|---|
過濾器 | 15 ns | 1.1 ns |
和w / o組 | 14 ns | 0.9 ns |
和w /組 | 79納秒 | 10.7 ns |
散列連接 | 115納秒 | 4.0 ns |
排序熵(8位) | 620納秒 | 5.3 ns |
排序熵(64位) | 620納秒 | 40 ns |
分類合並加入 | 750納秒 | 700納秒 |
端到端查詢這個新引擎是如何工作的?我們做了一些初步分析使用TPC-DS查詢比較1.6火花,火花2.0:
舞台之外的代碼生成來提高性能,很多工作也進入改善催化劑優化器等通用查詢優化nullability傳播,以及一個新的矢量化鋪解碼器,拚花掃描吞吐量提高了3倍。讀這篇文章在火花2.0中詳細的優化。
聰明:結構化流
火花流一直帶領大數據空間的第一個係統統一批處理和流計算。當它流API,稱為DStreams,是在火花0.7中引入的,它提供了開發人員和幾個強大的屬性:隻有一次語義,在規模、容錯強有力的保證一致性和高吞吐量。
然而,在處理數以百計的實際部署的火花,我們發現,應用程序需要實時決策往往需要不僅僅是一個流引擎。他們需要批堆棧深度集成和流堆棧,互動與外部存儲係統,以及應對變化的能力的業務邏輯。因此,企業不僅僅要流引擎;相反,他們需要一個完整的堆棧,使他們能夠開發端到端“連續應用。”
火花2.0解決這些用例通過一個名為結構化流的新API。與現有的流媒體係統相比,結構化流使三個關鍵的改進:
- 集成API與批處理作業。運行流計算,開發人員隻需寫一個批處理計算DataFrame /數據API,並自動火花incrementalizes計算運行它以流媒體的方式(即更新結果數據進來)。這種強大的設計意味著開發人員不必手工管理狀態,失敗,或與批處理作業保持應用程序同步。相反,流媒體的工作總是給出了相同的答案作為批處理作業相同的數據。
- 事務與存儲係統的交互。結構化流處理引擎和容錯性和一致性整體存儲係統,使其易於編寫的應用程序更新數據庫用於服務生活,加入靜態數據,或移動存儲係統之間的數據可靠。
- 豐富的集成與火花。結構化流支持交互式流數據通過火花SQL查詢,對靜態數據連接,和已經在使用DataFrames許多圖書館,讓開發人員構建完整的應用程序,而不隻是流管道。在未來,期待更多的集成與MLlib和其他庫。
火花2.0附帶一個初始,alpha版本的結構化流,(小得驚人!)擴展DataFrame /數據API。這使它很容易采用現有火花實時用戶想回答的新問題。其他重要的功能,包括支持基於事件時間的處理,無序/延遲數據,與非交互式查詢,和交互數據來源和下沉。
我們也更新了磚的工作區來支持結構化流。例如,當啟動一個流媒體查詢,筆記本用戶界麵將自動顯示其地位。
流媒體顯然是一個廣泛的話題,所以請繼續關注一係列的博文結構化流在Apache 2.0火花的更多細節。
結論
引發用戶最初來到Apache火花的易用性和性能。2.0雙打在這些火花,同時支持一個更廣泛的擴展它的工作負載。享受新版本在磚上。