跳轉到主要內容
工程的博客

技術預覽版的Apache火花2.0磚

通過雷諾鑫

2016年5月11日, 工程的博客

分享這篇文章

在過去的幾個月裏,我們一直在忙著為大數據的下一個主要版本的開源軟件我們愛:Apache 2.0火花。兩年前因為火花1.0出來,我們聽見讚美和投訴。火花2.0基於社區已經學到的東西在過去的兩年裏,加倍的用戶喜歡什麼和改進用戶抱怨。雖然這篇文章總結了三大宗旨和themes-easier,更快,2.0和聰明組成火花,這裏值得強調的主題做深度的討論,我們將跟進深入博客在未來幾周內。

在我們深入研究之前,我們很高興地宣布Apache火花2.0技術預覽版的可用性。這個預覽包是基於上遊2.0.0-preview釋放。使用預覽的包很簡單,選擇“2.0(分支預覽)”版本當啟動一個集群:

截圖的創建一個新的Apache火花2.0集群技術預覽工作流在磚

而最後Apache火花2.0版本仍然是幾周的時間,這技術預覽版旨在提供早期訪問特性引發2.0基於上遊代碼庫。通過這種方式,您可以滿足你的好奇心嚐試閃亮的新玩具,當我們得到反饋和bug報告最終版本之前。

現在,讓我們看一看新的發展。

火花2.0:更容易,更快,更聰明

簡單:SQL和流線型的api

我們很自豪的一件事在火花是創建簡單的api,直觀的表達。火花2.0繼續這一傳統,關注兩個方麵:(1)標準SQL支持和(2)統一DataFrame /數據API。

在SQL方麵,我們已經顯著擴大了火花的SQL功能,通過引入一個新的ANSI SQL解析器和支持子查詢。火花2.0可以運行所有的99 TPC-DS查詢,需要許多SQL: 2003的特性。因為SQL的一個主要接口應用程序使用,這個擴展SQL功能大大減少遺留應用程序的移植到火花。

在編程API方麵,我們有流線型的API:

  • Scala中的統一DataFrames和數據集/ Java:在火花2.0開始,DataFrame隻是一個類型別名數據集的行。類型的方法(如。地圖,過濾器,groupByKey(如)和無類型的方法。選擇,groupBy)數據集類上都是可用的。同樣,這一新的數據接口是抽象相結合用於結構化流。自編譯時類型安全在Python和R不是一個語言功能,數據集的概念並不適用於這些語言的api。相反,DataFrame仍然主要編程抽象,這類似於這些語言的單節點數據幀的概念。
  • SparkSession:一個新的切入點,取代了舊SQLContext和HiveContext。DataFrame API,用戶的一個共同的源引發的混亂的“上下文”。注意,老SQLContext和HiveContext仍保持向後兼容性。
  • 更簡單、更高性能蓄電池API:我們設計一個新的累加器API,有一個簡單的類型層次結構和支持基本類型的專門化。舊蓄電池API已經棄用,但保留向後兼容性
  • DataFrame-based機器學習API中作為主要毫升API:2.0與火花,火花。毫升包,“管道”API,將成為主要的機器學習API。原來的火花。mllib包保存下來,未來的發展重點是DataFrame-based API。
  • 分布式算法R:增加了對廣義線性模型的支持(GLM),樸素貝葉斯、生存回歸,和k - means R。

快:火花作為編譯器

根據我們的2015年引發調查,91%的用戶認為火花的性能是最重要的方麵。因此,性能優化一直專注在我們的火花的發展。在我們開始計劃貢獻2.0火花,我們問自己一個問題:火花已經很快,但我們能把它的邊界,使火花快10倍?

這個問題讓我們從根本上重新思考我們構建的方式引發的物理執行層。當你看到在現代數據引擎(例如火花或其他MPP數據庫),大多數CPU周期花在無用的工作,如製作虛擬函數調用或讀/寫中間數據CPU緩存或內存。通過減少CPU周期的數量優化性能浪費在這些無用的工作已經很長一段時間的重點現代編譯器。

火花2.0附帶第二代鎢引擎。這個引擎構建在思想與現代編譯器和MPP數據庫和應用數據處理。主要的思想是在運行時排放優化字節碼,瓦解整個查詢到一個單一的功能,消除虛擬函數調用和中間數據利用CPU寄存器。我們稱這種技術“舞台代碼生成”。

給你一個急轉彎,我們測量的時間(納秒)需要處理一行在一個核心的一些運營商1.6 vs 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:

初步TPC-DS火花2.0 vs 1.6

舞台之外的代碼生成來提高性能,很多工作也進入改善催化劑優化器等通用查詢優化nullability傳播,以及一個新的矢量化鋪解碼器鋪掃描吞吐量提高了3倍。

聰明:結構化流

火花流一直帶領大數據空間的第一個嚐試統一批處理和流計算。作為第一流API調用DStream在火花0.7中引入的,它提供了開發人員和幾個強大的屬性:隻有一次語義,在規模、容錯和高吞吐量。

然而,在處理數以百計的實際部署的火花,我們發現,應用程序需要在實時做出決策往往需要的不僅僅是一個流引擎。他們需要批堆棧深度集成和流棧,與外部存儲係統的集成,以及處理業務邏輯的變化的能力。因此,企業不僅僅要流引擎;相反,他們需要一個完整的堆棧,使他們能夠開發端到端“連續應用。”

一所學校的思想是把一切都像一個流;也就是說,采用單個編程模型集成這兩個批處理和流數據。

這種單一模式,存在許多問題。首先,操作數據到達可以是非常困難和限製。第二,不同的數據分布,變化的業務邏輯,和延遲數據添加獨特的挑戰。第三,大多數現有的係統,比如MySQL或Amazon S3,不要表現得像一個流和許多算法(包括最現成的機器學習)不工作在一個流媒體設置。

火花2.0的結構化流api是一種新型的方法流。它源於意識到最簡單的方法來計算數據流,是答案不需要原因,這是一個流。這個實現來自我們的經驗已經知道如何編程的程序員靜態數據集(又名批)API使用引發強大的DataFrame /數據集。結構化流的願景是利用催化劑優化器時發現可以透明地將靜態程序變成增量執行工作動態,無限的數據(即流)。當通過結構化角度看數據離散表或無限的表簡化流。

認識到,實現這一目標的第一步,火花2.0附帶一個結構化流的初始版本API,(小得驚人!)擴展DataFrame /數據API。這應統一采用簡單為現有火花用戶,允許他們利用他們的知識的火花批API實時回答的新問題。關鍵特性將包括支持基於事件時間處理,無序/延遲數據,sessionization與非緊密集成,數據來源和下沉。

流媒體顯然是一個非常廣泛的主題,所以請繼續關注這個博客的更多細節在結構化流火花2.0,包括什麼是可能的細節在此版本中,什麼是在不久的將來的路線圖。

結論

引發用戶最初來激發其易用性和性能。2.0雙打在這些火花,同時支持一個更廣泛的擴展它的工作負載。我們希望你能喜歡預覽,期待你的反饋。

當然,上遊Apache火花2.0版本完成之前,我們不建議完全任何生產工作負載遷移到這個預覽包。這個技術預覽版本現在可以在磚上。獲得數據磚,簽約在這裏

閱讀更多

如果你錯過了我們的網絡研討會Apache 2.0:火花更容易,更快,更聰明,你可以下載幻燈片和筆記本。

免費試著磚
看到所有工程的博客的帖子
Baidu
map