Spark是一個生態(tài)系統(tǒng),很多人不會編程,你可以用Spark SQL處理,你只要會寫SQL就OK了。你有圖的數(shù)據(jù),做圖計(jì)算,可以使用Graphx,如果你想做距離的分類,推薦等等,有一個Mllib,這樣的話,你直接利用這里提供的就OK了,Spark是一個生態(tài)系統(tǒng),是一個軟件站。不同的軟件會解決不同的問題,比如說是不是我只用SQL就行了,不好意思,有一些機(jī)器學(xué)習(xí)算法不可能只用SQL來表達(dá),大數(shù)據(jù),包括人工智能,這些機(jī)器學(xué)習(xí),深度學(xué)習(xí)已經(jīng)越來越流行。這塊是SQL解決不了的,很多必須要用APR來寫,當(dāng)然更多的是做一些實(shí)時統(tǒng)計(jì),這種可以Spark SQL。隨著大數(shù)據(jù)地發(fā)展,很多很多的數(shù)據(jù)處理都逐漸的流式化,所以streaming也越來越受歡迎。
接下來我們看一下Spark在互聯(lián)網(wǎng)上的應(yīng)用。
這是做了一個匯集,首先第一個是騰訊,它用Spark做什么呢?一個產(chǎn)品是廣點(diǎn)通,這里面有一個推薦的功能,這里主要是用Spark實(shí)現(xiàn)算法,就是迭代,直到得到這個模型就停止了。在騰訊內(nèi)部得到了廣泛的應(yīng)用。另外是日志分析,現(xiàn)在轉(zhuǎn)移到了SparkSQL,這是實(shí)現(xiàn)的一些算法,預(yù)測用戶的廣告點(diǎn)擊概率,計(jì)算兩個好友間的共同好友數(shù)。
阿里巴巴有哪些應(yīng)用呢?主要是在搜索和廣告業(yè)務(wù)里用到了Spark。之前他們的很多算法都是用Mahoout來實(shí)現(xiàn)的,它是非常低效的。阿里巴巴的量非常的大,需要很長的時間。有了Spark后,可以把這個做的非常的高效。另外就是圖算法,阿里巴巴有一些圖像化的數(shù)據(jù),可以用graphx來分析用戶的關(guān)聯(lián)關(guān)系。
第三個是優(yōu)酷土豆,他們也是來解決Mapreduce存在的一些問題,比如說性能問題,迭代計(jì)算上的性能比較低效等等。他們最后把它應(yīng)用在極其機(jī)器學(xué)習(xí)圖計(jì)算等等。Spark最大的優(yōu)勢就是用在機(jī)器學(xué)習(xí)領(lǐng)域,比如說做一個人的關(guān)系的挖掘,比如說SQL肯定解決不了,Mapreduce非常低效,這個時候你必須得自己寫一些算法來實(shí)現(xiàn)。
接下來我們看看Spark2.0,它是最近發(fā)布的一個版本,有重大的改進(jìn)。我們看看到底做了哪些改進(jìn)。
首先看性能方面,首先是它的SQL計(jì)算方面用到了datooFrame中的算子性能優(yōu)化2到10倍。另外是向量化計(jì)算,提供Parquet掃描吞吐率,還有提升了ORC讀寫性能。另外產(chǎn)品優(yōu)化器是CATALYST。
在功能方面,在三個關(guān)鍵組建里做了大量優(yōu)化和功能上的改進(jìn)。一個是執(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ū)ο缶幊谭绞剑С址墙Y(jié)構(gòu)化數(shù)據(jù),JAVA與SCALA統(tǒng)一了接口,性能極和了序列化框架。在這里,做了非常重大的改進(jìn),比如說編碼,之前你如果用Spark寫程序的話,用JAVA表示的話,可能是幾十個字節(jié),Spark里做了大量的優(yōu)化,比如說編碼之后只占少量,Spark做了非常大的改進(jìn)。
給大家看一個例子,在現(xiàn)在絕大部分人用比較典型的RGD來寫程序,認(rèn)為非常的簡單,都非常容易。的確是非常方便,但是現(xiàn)在看來不夠更進(jìn)階,比如說很多人看了這個不知道他做什么。但是跟你后面的程序一眼就可以看出來。Spark2.0里面可以把寫程序變得這么簡單。Dataframes是非常簡捷的,相當(dāng)于SQL。另外是SparkSQL在執(zhí)行上做了大量的優(yōu)化。提出了未來五年的計(jì)劃,主要是在優(yōu)化CPU和memory做了優(yōu)化,怎么樣提高CPU的計(jì)算,怎么樣充分的利用CPU的資源,它提出了三方面的優(yōu)化,一個是關(guān)于對象的表示,對心的序列號方面做了優(yōu)化,它是用JAVA寫的,對象內(nèi)存開銷比較大,序列號的開銷也比較大,這有一系列的問題。這個方面的優(yōu)化,想用類C語言的方式來表示JAVA的對象,JAVA允許你用二進(jìn)制的方式來表達(dá),而且它的內(nèi)存完全是自己管理,實(shí)現(xiàn)了一整套管理的序列化機(jī)制。
第二個是cache-aware,可以盡可能的合理使用CPU的cache,宣布實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的算法。
第三個是可去除條件檢查,尖沙虛函數(shù)調(diào)度等。
它的目標(biāo)是逼近物理性能的極限,渣干機(jī)器可以利用的資源加速計(jì)算。
第三個優(yōu)化是對SQL的支持,現(xiàn)在已經(jīng)支持準(zhǔn)的SQL2003,可跑通所有的TPC-DS查詢。對SQL的支持花了越來越多的力氣,在不久的將來可能對SQL的支持會越來越好。對SQL的支持是很多用戶的需求,也是期望。所以Spark支持了。