自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Apache Spark 2.0簡(jiǎn)介,那些你想知道的事都在這里了

大數(shù)據(jù) Spark
Spark Streaming在大數(shù)據(jù)領(lǐng)域第一次嘗試將批處理和流計(jì)算進(jìn)行了統(tǒng)一。

[[181274]]

今天介紹一篇文章,詳細(xì)闡述了Apache Spark 2.0突出的三大優(yōu)點(diǎn):更容易、更快速、更智能。

兩個(gè)月前,我們?cè)贒atabricks上發(fā)布了Apache Spark 2.0的預(yù)覽版本。從下面的圖表可以看出,我們的10%的集群已經(jīng)使用這個(gè)版本,同時(shí)客戶試用了其新功能,并向我們提供了反饋意見。

隨時(shí)間的推移各個(gè)不同版本Apache Spark的使用情況

現(xiàn)在,讓我們一起更深入地了解Apache Spark 2.0的新功能。

更容易:ANSI SQL和簡(jiǎn)化版的API

我們?yōu)镾park感到特別自豪的一件事是簡(jiǎn)單、直觀和表達(dá)性強(qiáng)的API。Spark 2.0繼續(xù)了這一傳統(tǒng),其重點(diǎn)關(guān)注以下兩大領(lǐng)域:

  1. 標(biāo)準(zhǔn)SQL支持
  2. 統(tǒng)一DataFrame/Dataset API。

在SQL方面,我們已經(jīng)大大擴(kuò)展了Spark的SQL支持功能,并引入了一個(gè)新的ANSI SQL解析器和對(duì)子查詢(subqueries)的支持?,F(xiàn)在,Spark 2.0已經(jīng)可以運(yùn)行TPC-DS的所有99個(gè)查詢,這99個(gè)查詢需要諸多的SQL:2003特性。因?yàn)镾QL一直是Spark的主要接口之一,因此這些擴(kuò)展功能大大降低了移植舊應(yīng)用程序的工作量。

在程序化API方面,我們已經(jīng)簡(jiǎn)化了Spark的API:

統(tǒng)一Scala和Java中DataFrames和Datasets:從Spark 2.0開始,DataFrame只是Dataset of Row的類型別名。Dataset類同時(shí)支持類型化方法(例如map、filter,groupByKey)和非類型化方法(例如select、groupBy)。此外,這個(gè)新的組合型Dataset接口是用于結(jié)構(gòu)化流(Structured Streaming)的抽象。

由于編譯時(shí)類型安全性在Python和R中并不是語(yǔ)言特性,因此Dataset的概念不適用于這些語(yǔ)言API。相反,DataFrame仍然是它們的主接口,并且類似于這些語(yǔ)言中的單節(jié)點(diǎn)數(shù)據(jù)幀概念。

SparkSession: 這是一個(gè)新的切入點(diǎn),取代了舊的SQLContext和HiveContext。對(duì)于DataFrame API的用戶而言,Spark的一個(gè)常見的容易產(chǎn)生困惑的地方就是我們正在使用哪個(gè)“運(yùn)行環(huán)境”?,F(xiàn)在您可以使用SparkSession作為單一切入點(diǎn),其同時(shí)涵括了SQLContext和HiveContext的功能。請(qǐng)注意,舊版本的SQLContext和HiveContext類仍然保持向后兼容性。

更容易、更高性能的累加器API(Accumulator API):我們?cè)O(shè)計(jì)了一個(gè)新的累加器API(Accumulator API),它具有更加簡(jiǎn)潔的類型層次結(jié)構(gòu),并支持原語(yǔ)類型的專門化。舊版本的Accumulator API已經(jīng)棄用,但仍然保留了向后兼容性。

  • 基于DataFrame的機(jī)器學(xué)習(xí)API成為主要的ML API:在Spark 2.0中,spark.ml包及其“管道”API將成為主要的機(jī)器學(xué)習(xí)API。雖然原始spark.mllib包被保留,但未來(lái)的開發(fā)將集中在基于DataFrame的API上。
  • 機(jī)器學(xué)習(xí)管道持久化:用戶現(xiàn)在可以利用Spark支持的所有編程語(yǔ)言保存和加載機(jī)器學(xué)習(xí)管道和模型。
  • 以R語(yǔ)言編寫的分布式算法:增加對(duì)以R語(yǔ)言編寫的廣義線性模型(Generalized Linear Models,GLM)、樸素貝葉斯(Naive Bayes)、生存回歸(Survival Regression)和K均值(K-Means)的支持。

以R語(yǔ)言編寫的用戶定義函數(shù)(UDF):增加對(duì)運(yùn)行分區(qū)級(jí)別UDF(dapply和gapply)和超參數(shù)調(diào)整(lapply)的支持。

更快速:Apache Spark作為編譯器

根據(jù)我們2015年Spark調(diào)查報(bào)告顯示,91%的用戶認(rèn)為性能是Apache Spark最為重要的考慮因素。因此,性能優(yōu)化始終是我們Spark開發(fā)的重點(diǎn)。在我們開始規(guī)劃對(duì)Spark 2.0的性能改進(jìn)之前,我們問(wèn)了自己一個(gè)問(wèn)題:雖然Spark已經(jīng)相當(dāng)快了,但是我們是否可以將其推向性能極限,使Spark 的運(yùn)行速度再提升十倍呢?

帶著這個(gè)問(wèn)題我們從根本上重新思考了Spark物理執(zhí)行層的設(shè)計(jì)方式。當(dāng)您隨便調(diào)查一個(gè)現(xiàn)代數(shù)據(jù)引擎(例如,Spark或其他MPP數(shù)據(jù)庫(kù))時(shí),您會(huì)發(fā)現(xiàn)大多數(shù)CPU周期都消耗在無(wú)用的工作上,比如進(jìn)行虛擬函數(shù)調(diào)用或讀取/寫入中間數(shù)據(jù)到CPU高速緩存或內(nèi)存中。通過(guò)減少在這些無(wú)用工作中浪費(fèi)的CPU周期數(shù)量來(lái)優(yōu)化性能已經(jīng)是現(xiàn)代編譯器的一直以來(lái)關(guān)注的熱點(diǎn)。

Spark 2.0中配備了第二代Tungsten引擎。這一代引擎是建立在現(xiàn)代編譯器和MPP數(shù)據(jù)庫(kù)的想法上,并且把它們應(yīng)用于數(shù)據(jù)的處理過(guò)程中。其主要想法是通過(guò)在運(yùn)行期間優(yōu)化那些拖慢整個(gè)查詢的代碼到一個(gè)單獨(dú)的函數(shù)中,消除虛擬函數(shù)的調(diào)用以及利用CPU寄存器來(lái)存放那些中間數(shù)據(jù)。我們把這些技術(shù)統(tǒng)稱為“整段代碼生成”(whole-stage code generation)。

為了有個(gè)直觀的感受,我們記錄下在Spark 1.6和Spark 2.0中在一個(gè)核上處理一行的操作時(shí)間(單位是納秒)。下面的表格能夠體現(xiàn)出Spark 2.0中新的Tungsten引擎的威力。Spark 1.6使用的表達(dá)式代碼生成技術(shù)同樣在今天的一些最先進(jìn)的商業(yè)數(shù)據(jù)庫(kù)中采用,但是您可以看到,許多運(yùn)算符在采用了“整段代碼生成”(whole-stage code generation)技術(shù)之后速度提升了一個(gè)數(shù)量級(jí)。

在本筆記本中,您可以看到“整段代碼生成”(whole-stage code generation)技術(shù)的威力,在這里我們?cè)谝慌_(tái)機(jī)器上對(duì)10億條記錄進(jìn)行Aggregation和Join操作。

那么在新的Tungsten引擎在端至端的查詢表現(xiàn)又會(huì)怎樣?我們比較了Spark 1.6和Spark 2.0在使用TPC-DS查詢的基本分析,如下圖所示:

除了“整段代碼生成”(whole-stage code generation)可以提高性能之外,Catalyst優(yōu)化器方面也做了許多的工作,比如改進(jìn)通用查詢優(yōu)化(例如,為空性傳播(nullability propagation));還有一個(gè)新的矢量化Parquet解碼器,它使得Parquet的掃描吞吐量提高了3倍。

更智能:結(jié)構(gòu)化流(Structured Streaming)

Spark Streaming在大數(shù)據(jù)領(lǐng)域第一次嘗試將批處理和流計(jì)算進(jìn)行了統(tǒng)一。在Spark 0.7版本開始引入的第一個(gè)流式API稱為DStreams,它為開發(fā)者提供了幾項(xiàng)強(qiáng)大的特性:恰好一次的語(yǔ)義、大規(guī)模容錯(cuò)、強(qiáng)一致性保證和高吞吐量。

然而,隨著數(shù)百個(gè)真實(shí)的Spark Streaming部署之后,我們發(fā)現(xiàn),需要實(shí)時(shí)作出決策的應(yīng)用程序通常需要不止一個(gè)流引擎。他們需要深度地將批處理堆棧和流處理堆棧進(jìn)行整合;需要和外部存儲(chǔ)系統(tǒng)進(jìn)行交互;以及需要應(yīng)付業(yè)務(wù)邏輯變化的能力。其結(jié)果是,企業(yè)需要的不僅僅是一個(gè)流式引擎;相反,他們需要一個(gè)完整的堆棧,使他們能夠開發(fā)終端到終端的“持續(xù)應(yīng)用程序”。

Spark 2.0通過(guò)一種稱為結(jié)構(gòu)化流(Structured Streaming)的新API來(lái)處理這些使用案例。與現(xiàn)有的流系統(tǒng)相比,結(jié)構(gòu)化流(Structured Streaming)主要做了以下三個(gè)方面的改進(jìn):

1、集成API與批處理作業(yè)。如需運(yùn)行流計(jì)算,開發(fā)人員只需對(duì)DataFrame/Dataset API編寫一個(gè)批處理計(jì)算,然后Spark會(huì)自動(dòng)遞增計(jì)算以便以流方式運(yùn)行(即在數(shù)據(jù)進(jìn)入時(shí)更新結(jié)果)。這種強(qiáng)大的設(shè)計(jì)意味著開發(fā)人員不必手動(dòng)管理狀態(tài)、故障或保持應(yīng)用程序與批處理作業(yè)同步。相反,流式作業(yè)總能給出與同一數(shù)據(jù)上的批處理作業(yè)相同的答案。

2、與存儲(chǔ)系統(tǒng)之間的事務(wù)交互。結(jié)構(gòu)化流(Structured Streaming)能夠在整個(gè)引擎和存儲(chǔ)系統(tǒng)中保持容錯(cuò)性和一致性,從而可以很容易地編寫應(yīng)用程序,該應(yīng)用程序能夠更新用于服務(wù)的實(shí)時(shí)數(shù)據(jù)庫(kù),加入靜態(tài)數(shù)據(jù)或在存儲(chǔ)系統(tǒng)之間可靠地移動(dòng)數(shù)據(jù)。

3、與Spark其余部分的豐富集成。結(jié)構(gòu)化流(Structured Streaming)支持通過(guò)Spark SQL對(duì)流數(shù)據(jù)進(jìn)行交互式查詢,對(duì)靜態(tài)數(shù)據(jù)進(jìn)行連接,以及許多已經(jīng)使用DataFrames的庫(kù),同時(shí)讓開發(fā)人員構(gòu)建完整的應(yīng)用程序,而不僅僅是流管道。未來(lái),期望與MLlib和其他庫(kù)實(shí)現(xiàn)更多的集成。

作為實(shí)現(xiàn)這一愿景的第一步,Spark 2.0附帶了一個(gè)初始的alpha版本的結(jié)構(gòu)化流(Structured Streaming),其擴(kuò)展自DataFrame/Dataset API(令人驚訝的小!)。這個(gè)統(tǒng)一對(duì)現(xiàn)有的Spark用戶比較容易適應(yīng),因?yàn)檫@讓他們能夠充分利用Spark批量處理API知識(shí)來(lái)解決實(shí)時(shí)中的新問(wèn)題。其它主要功能將包括支持基于事件時(shí)間的處理、亂序/延時(shí)數(shù)據(jù)、交互式查詢以及非流數(shù)據(jù)源和接收器的緊密集成。

此外,我們還更新了Databricks工作空間以支持結(jié)構(gòu)化流(Structured Streaming)。例如,當(dāng)啟動(dòng)流查詢時(shí),筆記本UI將自動(dòng)顯示其狀態(tài)。

Streaming顯然是一個(gè)非常寬泛的話題,所以敬請(qǐng)多關(guān)注,以了解Apache Spark 2.0中的結(jié)構(gòu)化流(Structured Streaming)的更多詳細(xì)信息。

責(zé)任編輯:武曉燕 來(lái)源: 36大數(shù)據(jù)
相關(guān)推薦

2018-11-28 10:39:01

5G網(wǎng)絡(luò)運(yùn)營(yíng)商

2023-09-11 08:51:23

LinkedList雙向鏈表線程

2021-06-17 13:40:47

區(qū)塊鏈比特幣公有鏈

2019-11-04 09:07:48

DevOps互聯(lián)網(wǎng)IT

2018-03-31 08:45:52

iPhone交通卡iOS 11.3

2019-04-24 08:31:43

分布式限流kafka

2020-03-18 18:20:19

區(qū)塊鏈數(shù)字貨幣比特幣

2021-07-02 14:09:36

開發(fā)技能代碼

2019-04-26 09:38:36

中臺(tái)平臺(tái)化轉(zhuǎn)型

2021-07-01 09:00:00

安全數(shù)字化轉(zhuǎn)型滲透

2017-12-13 14:24:08

Google 開發(fā)者瀏覽器

2022-11-08 15:55:34

鴻蒙開發(fā)套件

2017-08-15 15:35:21

大數(shù)據(jù)數(shù)據(jù)分析薪資秘密

2017-08-15 16:05:18

大數(shù)據(jù)數(shù)據(jù)分析薪資秘密

2019-10-29 15:28:40

Refs組件前端

2015-10-12 15:50:40

2022-09-15 14:22:19

協(xié)作規(guī)范前后端

2019-12-04 07:57:22

6G5G網(wǎng)絡(luò)

2018-08-23 11:58:53

區(qū)塊鏈數(shù)字貨幣比特幣

2015-04-13 16:13:11

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)