咱們很榮幸地宣佈,自7月26日起Databricks開始提供Apache Spark 2.0的下載,這個版本是基於社區在過去兩年的經驗總結而成,不但加入了用戶喜好的功能,也修復了以前的痛點。html
本文總結了Spark 2.0的三大主題:更簡單、更快速、更智能,另有Spark 2.0內容的文章彙總介紹了更多細節。程序員
兩個月前,Databricks發佈了Apache Spark 2.0的技術預覽版,以下表所見,目前咱們有10%的集羣都在使用這個版本,根據客戶使用新版的經驗及反饋意見,新版得以發佈,Databricks很開心能成爲Spark 2.0的首個商業供應商。算法
如今,咱們來深刻了解一下Apache Spark 2.0的新特性。數據庫
1、更簡單:ANSI SQL與更合理的APIapache
Spark讓咱們引覺得豪的一點就是所建立的API簡單、直觀、便於使用,Spark 2.0延續了這一傳統,並在兩個方面凸顯了優點:編程
在SQL方面,咱們已經對Spark的SQL功能作了重大拓展,引入了新的ANSI SQL解析器,並支持子查詢功能。Spark 2.0能夠運行全部99個TPC-DS查詢(需求SQL:2003中的不少功能支持)。因爲SQL是Spark應用所使用的主要接口之一,對SQL功能的拓展大幅削減了將遺留應用移植到Spark時所需的工做。api
在編程API方面,咱們合理化了API:緩存
2、速度更快:用Spark做爲編譯器安全
根據咱們2015年對Spark的調查,91%的用戶認爲對Spark來講,性能是最爲重要的。所以,性能優化一直是咱們在開發Spark時所考慮的重點。在開始Spark 2.0的規劃前,咱們思考過這個問題:Spark的速度已經很快了,但可否突破極限,讓Spark達到本來速度的10倍呢?性能優化
帶着這個問題,咱們切實考慮了在構建Spark物理執行層面時的方式。若是深刻調查現代的數據引擎,好比Spark或者其餘MPP數據庫,咱們會發現:CPU循環大多都作了無用功,好比執行虛擬函數調用,或者向CPU緩存或內存讀取/寫入中間數據;經過減小CPU循環中的浪費來優化性能,一直是咱們在現代編譯器上長時間以來的工做重點。
Spark 2.0搭載了第二代Tungsten引擎,該引擎是根據現代編譯器與MPP數據庫的理念來構建的,它將這些理念用於數據處理中,其主要思想就是在運行時使用優化後的字節碼,將總體查詢合成爲單個函數,再也不使用虛擬函數調用,而是利用CPU來註冊中間數據。咱們將這一技術稱爲「whole-stage code generation」。
在測試、對比Spark 1.6與Spark 2.0時,咱們列出了在單核中處理單行數據所花費的時間(以十億分之一秒爲單位),下面的表格列出了Spark 2.0的優化內容。Spark 1.6包含代碼生成技術(code generation)的使用,這一技術現在在一些頂尖的商業數據庫中也有運用,正如咱們看到的那樣,使用了新whole-stage code generation技術後,速度比以前快了一個數量級。
在這篇筆記中能夠查看其運用:咱們在單臺機器上對10億記錄執行了aggregations和joins操做。
這個新的引擎在執行端對端查詢時是如何運做的?咱們使用TPC-DS查詢作了些初步分析,以對比Spark 1.6與Spark 2.0:
除此以外,爲了改進Catalyst optimizer優化器對諸如nullability propagation之類常見查詢的效果,咱們還作了許多工做;另外還改進了矢量化Parquet解碼器,新解碼器的吞吐量增長了三倍。點擊這裏查看Spark 2.0優化的更多細節。
3、更智能:Structured Streaming
做爲首個嘗試統一批處理與流處理計算的工具,Spark Streaming一直是大數據處理的領導者。首個流處理API叫作DStream,在Spark 0.7中初次引入,它爲開發者提供了一些強大的特性,包括:只有一次語義,大規模容錯,以及高吞吐。
然而,在處理了數百個真實世界的Spark Streaming部署以後,咱們發現須要在真實世界作決策的應用常常須要不止一個流處理引擎。他們須要深度整合批處理堆棧與流處理堆棧,整合內部存儲系統,而且要有處理業務邏輯變動的能力。所以,各大公司須要不止一個流處理引擎,而且須要能讓他們開發端對端「持續化應用」的全棧系統。
Spark 2.0使用一個新的API:Structured Streaming模塊來處理這些用例,與現有流系統相比,Structured Streaming有三個主要的改進:
Spark 2.0搭載了初始alpha版的Strutured Streaming API,這是一個附在DataFrame/Dataset API上的(超小)擴展包。統一以後,對現有的Spark用戶來講使用起來很是簡單,他們可以利用在Spark 批處理API方面的知識來回答實時的新問題。這裏關鍵的功能包括:支持基於事件時間的處理,無序/延遲數據,sessionization以及非流式數據源與Sink的緊密集成。
咱們還更新了Databricks workspace以支持Structured Streaming。例如,在啓動streaming查詢時,notebook UI會自動顯示其狀態。
結論
Spark的用戶最初使用Spark是由於它的易用性與高性能。Spark 2.0在這些方面達到了以前的兩倍,並增長了對多種工做負載的支持,請嘗試一下新版本吧。
文章轉載自:http://geek.csdn.net/news/detail/91745?utm_source=tuicool&utm_medium=referral
英文原文地址:https://databricks.com/blog/2016/07/26/introducing-apache-spark-2-0.html