9月1日,由工業(yè)和信息化部指導(dǎo),中國信息通信研究院、中國通信標(biāo)準(zhǔn)化協(xié)會(huì)主辦,數(shù)據(jù)中心聯(lián)盟承辦的“2016可信云大會(huì)”在京隆重召開。在9月2日下午的大數(shù)據(jù)分論壇上,Hulu大數(shù)據(jù)架構(gòu)組負(fù)責(zé)人董西城發(fā)表了題為《Spark2.0新特性與展望》的演講。
目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、鳳山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。Hulu大數(shù)據(jù)架構(gòu)組負(fù)責(zé)人 董西城
以下是演講實(shí)錄:
大家好,我叫董西城,今天很高興跟大家分享Spark2.0。我我現(xiàn)在是就職于美國的一家公司,做正版的美劇和電影。主要的市場(chǎng)是在北美。我之前寫過Hadoop的技術(shù)內(nèi)幕這本書,主要工作是圍繞Hadoop和Spark方面。
今天主要介紹的是Spark2.0,我會(huì)從以下幾個(gè)角度給大家剖析Spark2.0。
首先簡單介紹Spark,第二部分是會(huì)給大家談?wù)劗?dāng)前Spark在互聯(lián)網(wǎng)公司的應(yīng)用,都做什么。第三部分是Spark2.0里面新的一些特性。
第一部分,Spark2.0的簡介。
Spark主要是原自于Mapreduce,是美國的一些大學(xué)的博士一些大數(shù)據(jù)的研究,首先是Mapreduce有一些局限性,它受限,你要實(shí)現(xiàn)復(fù)雜的功能,要做很多的工作。大家從名字上也可以看出來,Mapreduce的優(yōu)點(diǎn)是寫起程序來非常簡單,缺點(diǎn)是太簡單了,以至于寫復(fù)雜的程序要做大量的工作。第二個(gè)是性能,十年前磁盤是比較廉價(jià)的,內(nèi)存是比較昂貴的,那時(shí)候很多的觀念都是基于磁盤上設(shè)計(jì)一些都是,而Mapreduce是這樣做的,很多的設(shè)計(jì)理念是基于磁盤進(jìn)行的。所以導(dǎo)致他的性能非常低效。而到今天已經(jīng)發(fā)生了變化了,磁盤已經(jīng)成為過去了,所以在這塊做了一些嘗試,想盡可能的在內(nèi)存上做一些工作,優(yōu)化框架。
另外一個(gè)背景是多種框架并存。當(dāng)研究Mapreduce的這些人,在設(shè)計(jì)Mapreduce的時(shí)候,發(fā)現(xiàn)了當(dāng)時(shí)多種框架是并存的,當(dāng)時(shí)有三種并行計(jì)算的場(chǎng)景,第一個(gè)是批處理,比如說我要產(chǎn)生一個(gè)報(bào)表,明天看到就可以了。最典型的是批處理,當(dāng)時(shí)簡單的是Mapreduce/Hive,第二個(gè)是交互式處理,最典型的是impala/presto,第三種是實(shí)時(shí)處理,典型的是storm。像阿里巴巴有個(gè)滾動(dòng)的大屏幕,要實(shí)時(shí)的統(tǒng)計(jì)截至1點(diǎn)的時(shí)候交易量是多少,那是實(shí)時(shí)的統(tǒng)計(jì),實(shí)時(shí)的匯總交易數(shù)據(jù),做一個(gè)匯總展示,這是一個(gè)實(shí)時(shí)數(shù)據(jù),有一筆記錄我就做一個(gè)匯總。這是多種框架并存的局面。
如果你們公司每一種應(yīng)用場(chǎng)景都需要的話,你可能至少要有三套系統(tǒng),有三個(gè)集群,這樣的話管理起來,運(yùn)行起來非常的麻煩。是不是能設(shè)計(jì)一套系統(tǒng)解決這三個(gè)場(chǎng)景,而且他們是一套,這樣的話學(xué)習(xí)起來都是統(tǒng)一的,接口都是統(tǒng)一的,維護(hù)起來也是統(tǒng)一的。而不是說你要搭建三套,每一套都需要單獨(dú)學(xué)習(xí),因?yàn)樗刹煌纳鷳B(tài)構(gòu)成的。這樣的話,你需要三個(gè)系統(tǒng),這三個(gè)系統(tǒng)是完全的不同的方式,你的學(xué)習(xí)成本和運(yùn)維成本都會(huì)非常高。
那么我們做了一個(gè)嘗試,Spark的特點(diǎn),一個(gè)是非常的高效,統(tǒng)計(jì)上看,比Mapreduce快10到100倍,從數(shù)據(jù)上可以看到,Mapreduce是非常慢的框架??於嗌俦度Q于具體的場(chǎng)景。為什么這么高效呢?第一,它是DAG的引擎,而Mapreduce也可以把它看成DAG的引擎,但是是非常簡單的,它只有兩個(gè),點(diǎn)和邊。如果想做非常復(fù)雜的運(yùn)算,是非常非常大量的作業(yè)。如果你用Mapreduce做的話這個(gè)要做四個(gè)作業(yè),這個(gè)是通過存儲(chǔ)不不同的Mapreduce作業(yè)銜接在一起的。而通用的DAG引擎,所有的數(shù)據(jù)都不需要落在這種文件系統(tǒng)里,直接可以通過流式的,或者是其它的方式銜接起來。這是Spark的一個(gè)核心的設(shè)計(jì)理念。
第二個(gè),它可以充分的使用內(nèi)存。SparK提供了充分使用內(nèi)容的能力,可以把數(shù)據(jù)處理完之后做落到磁盤上或者是其它地方,是非常靈活的。實(shí)際上,如果你不想用內(nèi)存,可以關(guān)掉,這個(gè)時(shí)候可以做一些簡單的運(yùn)算。
另外是易用的,提供了四種編程語言,代碼量也比Mapreduce要小2到5倍。現(xiàn)在有一個(gè)趨勢(shì),就是還是編程語言越來越受歡迎,鄙視說Scala,python。
第三個(gè)是與Hadoop集成,可以讀寫hdfs/hbase,與YARN集成。
Spark核心理念,一個(gè)是RDD,彈性分布式數(shù)據(jù)集,對(duì)分布式數(shù)據(jù)抽象,你可以采用其它方式來實(shí)現(xiàn),也是沒有問題的。在RDD上,如果把這個(gè)數(shù)據(jù)轉(zhuǎn)成RDD后,它提供了豐富的編程接口。比說有map,filter等等,有多少個(gè)結(jié)點(diǎn)都可以擴(kuò)展。
Spark還有個(gè)非常強(qiáng)大的方式,就是部署方式非常的靈活,你可以運(yùn)行在本地,也可以運(yùn)行在standalone上,也可以部署在mesos/yarn。
Spark是一個(gè)生態(tài)系統(tǒng),很多人不會(huì)編程,你可以用Spark SQL處理,你只要會(huì)寫SQL就OK了。你有圖的數(shù)據(jù),做圖計(jì)算,可以使用Graphx,如果你想做距離的分類,推薦等等,有一個(gè)Mllib,這樣的話,你直接利用這里提供的就OK了,Spark是一個(gè)生態(tài)系統(tǒng),是一個(gè)軟件站。不同的軟件會(huì)解決不同的問題,比如說是不是我只用SQL就行了,不好意思,有一些機(jī)器學(xué)習(xí)算法不可能只用SQL來表達(dá),大數(shù)據(jù),包括人工智能,這些機(jī)器學(xué)習(xí),深度學(xué)習(xí)已經(jīng)越來越流行。這塊是SQL解決不了的,很多必須要用APR來寫,當(dāng)然更多的是做一些實(shí)時(shí)統(tǒng)計(jì),這種可以Spark SQL。隨著大數(shù)據(jù)地發(fā)展,很多很多的數(shù)據(jù)處理都逐漸的流式化,所以streaming也越來越受歡迎。
接下來我們看一下Spark在互聯(lián)網(wǎng)上的應(yīng)用。
這是做了一個(gè)匯集,首先第一個(gè)是騰訊,它用Spark做什么呢?一個(gè)產(chǎn)品是廣點(diǎn)通,這里面有一個(gè)推薦的功能,這里主要是用Spark實(shí)現(xiàn)算法,就是迭代,直到得到這個(gè)模型就停止了。在騰訊內(nèi)部得到了廣泛的應(yīng)用。另外是日志分析,現(xiàn)在轉(zhuǎn)移到了SparkSQL,這是實(shí)現(xiàn)的一些算法,預(yù)測(cè)用戶的廣告點(diǎn)擊概率,計(jì)算兩個(gè)好友間的共同好友數(shù)。
阿里巴巴有哪些應(yīng)用呢?主要是在搜索和廣告業(yè)務(wù)里用到了Spark。之前他們的很多算法都是用Mahoout來實(shí)現(xiàn)的,它是非常低效的。阿里巴巴的量非常的大,需要很長的時(shí)間。有了Spark后,可以把這個(gè)做的非常的高效。另外就是圖算法,阿里巴巴有一些圖像化的數(shù)據(jù),可以用graphx來分析用戶的關(guān)聯(lián)關(guān)系。
第三個(gè)是優(yōu)酷土豆,他們也是來解決Mapreduce存在的一些問題,比如說性能問題,迭代計(jì)算上的性能比較低效等等。他們最后把它應(yīng)用在極其機(jī)器學(xué)習(xí)圖計(jì)算等等。Spark大的優(yōu)勢(shì)就是用在機(jī)器學(xué)習(xí)領(lǐng)域,比如說做一個(gè)人的關(guān)系的挖掘,比如說SQL肯定解決不了,Mapreduce非常低效,這個(gè)時(shí)候你必須得自己寫一些算法來實(shí)現(xiàn)。
接下來我們看看Spark2.0,它是最近發(fā)布的一個(gè)版本,有重大的改進(jìn)。我們看看到底做了哪些改進(jìn)。
首先看性能方面,首先是它的SQL計(jì)算方面用到了datooFrame中的算子性能優(yōu)化2到10倍。另外是向量化計(jì)算,提供Parquet掃描吞吐率,還有提升了ORC讀寫性能。另外產(chǎn)品優(yōu)化器是CATALYST。
在功能方面,在三個(gè)關(guān)鍵組建里做了大量優(yōu)化和功能上的改進(jìn)。一個(gè)是執(zhí)行優(yōu)化方面做了工作,這是突出的優(yōu)化項(xiàng)目,優(yōu)化的計(jì)劃,支持sprk SQL2003,機(jī)器學(xué)習(xí)方面做了重大的改進(jìn)。
首先是SparkSQL,是基于SQL的引擎,當(dāng)然不僅僅支持SQL還支持DSL,。它不是類型安全的,缺乏函數(shù)式編程能力,在1.6和2.0里面增加了新的編程方式,是DATASET它是類型安全的,面向?qū)ο缶幊谭绞?,支持非結(jié)構(gòu)化數(shù)據(jù),JAVA與SCALA統(tǒng)一了接口,性能極和了序列化框架。在這里,做了非常重大的改進(jìn),比如說編碼,之前你如果用Spark寫程序的話,用JAVA表示的話,可能是幾十個(gè)字節(jié),Spark里做了大量的優(yōu)化,比如說編碼之后只占少量,Spark做了非常大的改進(jìn)。
給大家看一個(gè)例子,在現(xiàn)在絕大部分人用比較典型的RGD來寫程序,認(rèn)為非常的簡單,都非常容易。的確是非常方便,但是現(xiàn)在看來不夠更進(jìn)階,比如說很多人看了這個(gè)不知道他做什么。但是跟你后面的程序一眼就可以看出來。Spark2.0里面可以把寫程序變得這么簡單。Dataframes是非常簡捷的,相當(dāng)于SQL。另外是SparkSQL在執(zhí)行上做了大量的優(yōu)化。提出了未來五年的計(jì)劃,主要是在優(yōu)化CPU和memory做了優(yōu)化,怎么樣提高CPU的計(jì)算,怎么樣充分的利用CPU的資源,它提出了三方面的優(yōu)化,一個(gè)是關(guān)于對(duì)象的表示,對(duì)心的序列號(hào)方面做了優(yōu)化,它是用JAVA寫的,對(duì)象內(nèi)存開銷比較大,序列號(hào)的開銷也比較大,這有一系列的問題。這個(gè)方面的優(yōu)化,想用類C語言的方式來表示JAVA的對(duì)象,JAVA允許你用二進(jìn)制的方式來表達(dá),而且它的內(nèi)存完全是自己管理,實(shí)現(xiàn)了一整套管理的序列化機(jī)制。
第二個(gè)是cache-aware,可以盡可能的合理使用CPU的cache,宣布實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的算法。
第三個(gè)是可去除條件檢查,尖沙虛函數(shù)調(diào)度等。
它的目標(biāo)是逼近物理性能的極限,渣干機(jī)器可以利用的資源加速計(jì)算。
第三個(gè)優(yōu)化是對(duì)SQL的支持,現(xiàn)在已經(jīng)支持準(zhǔn)的SQL2003,可跑通所有的TPC-DS查詢。對(duì)SQL的支持花了越來越多的力氣,在不久的將來可能對(duì)SQL的支持會(huì)越來越好。對(duì)SQL的支持是很多用戶的需求,也是期望。所以Spark支持了。
第二個(gè)是Spark structured,每個(gè)小時(shí)我們要啟動(dòng)一個(gè)Spark作業(yè),來處理前一個(gè)小時(shí)的用戶日志或者是用戶行為,這個(gè)時(shí)候這個(gè)作業(yè)要有一個(gè)調(diào)度引擎,這時(shí)候要加一個(gè)調(diào)度器來實(shí)現(xiàn)這個(gè)功能。如果你處理完前一個(gè)小時(shí)的數(shù)據(jù),下一個(gè)小時(shí)處理的時(shí)候,有可能跑來前一個(gè)小時(shí)的日志,比如說發(fā)生的過程中可能有延遲的問題,Spark streaming可以很好的解決這個(gè)問題,是結(jié)構(gòu)化的數(shù)據(jù),這個(gè)批處理程序,你只要給一下這個(gè)源就可以,整體的實(shí)現(xiàn)體是一模一樣的,這樣的話實(shí)現(xiàn)了批處理流式計(jì)算,一個(gè)代碼既可以跑流式計(jì)算,也可以跑批處理。它提供了很多的設(shè)置,來對(duì)接不同的數(shù)據(jù)源,比如說對(duì)接各種各樣的程序引擎。
另外,可以跟一個(gè)靜態(tài)數(shù)據(jù)做一個(gè)連接,另外也可以做交互式查詢,通過接口來查詢流式計(jì)算統(tǒng)計(jì)的結(jié)果。這是Spark streaming跟其它的流式計(jì)算做的對(duì)比,在一致性上,在API上,對(duì)事物的支持上,對(duì)交互式的支持上等等,它自己跟前一帶的Spark streaming,跟Hadoop,跟STORM等做了對(duì)比。
第三個(gè)模塊,在2.0里做了大量的優(yōu)化,一個(gè)是ML pipeline,它實(shí)現(xiàn)了所有的模型都可以替換,可以持久化到磁盤。基于Dataframe的API,它可以自動(dòng)做大量的優(yōu)化,使用傳統(tǒng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫里的一些優(yōu)化機(jī)制,自動(dòng)的優(yōu)化。
另外,它有一個(gè)非常重要的功能,一個(gè)是實(shí)現(xiàn)了廣義線性模型,第二個(gè)是支持python和api第三個(gè)是模型持久化能第四個(gè)是pipieline定制化。它可以很好的把組建結(jié)合在一起,訓(xùn)練做完之后有哪種評(píng)估模型對(duì)訓(xùn)練的做一個(gè)評(píng)估,然后做一個(gè)打分等等,所有的東西都做成了組建,你可以插拔的方式來做。
前面我把Spark2.0做了介紹。這是今天的所有內(nèi)容。Spark2.0已經(jīng)發(fā)布,但是遠(yuǎn)不成熟,因?yàn)楦倪M(jìn)的東西太多太多了,按照傳統(tǒng)的經(jīng)驗(yàn),至少調(diào)到2.1,2.2,2.3才可以。
文章名稱:Hulu大數(shù)據(jù)架構(gòu)組負(fù)責(zé)人董西城:Spark2.0新特性與展望
文章路徑:http://aaarwkj.com/article20/sdhsco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站導(dǎo)航、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、App設(shè)計(jì)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)