9月1日,由工業(yè)和信息化部指導(dǎo),中國信息通信研究院、中國通信標(biāo)準(zhǔn)化協(xié)會主辦,數(shù)據(jù)中心聯(lián)盟承辦的“2016可信云大會”在京隆重召開。在9月2日下午的大數(shù)據(jù)分論壇上,Hulu大數(shù)據(jù)架構(gòu)組負(fù)責(zé)人董西城發(fā)表了題為《Spark2.0新特性與展望》的演講。
Hulu大數(shù)據(jù)架構(gòu)組負(fù)責(zé)人 董西城
以下是演講實錄:
大家好,我叫董西城,今天很高興跟大家分享Spark2.0。我我現(xiàn)在是就職于美國的一家公司,做正版的美劇和電影。主要的市場是在北美。我之前寫過Hadoop的技術(shù)內(nèi)幕這本書,主要工作是圍繞Hadoop和Spark方面。
今天主要介紹的是Spark2.0,我會從以下幾個角度給大家剖析Spark2.0。
首先簡單介紹Spark,第二部分是會給大家談?wù)劗?dāng)前Spark在互聯(lián)網(wǎng)公司的應(yīng)用,都做什么。第三部分是Spark2.0里面新的一些特性。
第一部分,Spark2.0的簡介。
Spark主要是原自于Mapreduce,是美國的一些大學(xué)的博士一些大數(shù)據(jù)的研究,首先是Mapreduce有一些局限性,它受限,你要實現(xiàn)復(fù)雜的功能,要做很多的工作。大家從名字上也可以看出來,Mapreduce的優(yōu)點是寫起程序來非常簡單,缺點是太簡單了,以至于寫復(fù)雜的程序要做大量的工作。第二個是性能,十年前磁盤是比較廉價的,內(nèi)存是比較昂貴的,那時候很多的觀念都是基于磁盤上設(shè)計一些都是,而Mapreduce是這樣做的,很多的設(shè)計理念是基于磁盤進(jìn)行的。所以導(dǎo)致他的性能非常低效。而到今天已經(jīng)發(fā)生了變化了,磁盤已經(jīng)成為過去了,所以在這塊做了一些嘗試,想盡可能的在內(nèi)存上做一些工作,優(yōu)化框架。
另外一個背景是多種框架并存。當(dāng)研究Mapreduce的這些人,在設(shè)計Mapreduce的時候,發(fā)現(xiàn)了當(dāng)時多種框架是并存的,當(dāng)時有三種并行計算的場景,第一個是批處理,比如說我要產(chǎn)生一個報表,明天看到就可以了。最典型的是批處理,當(dāng)時簡單的是Mapreduce/Hive,第二個是交互式處理,最典型的是impala/presto,第三種是實時處理,典型的是storm。像阿里巴巴有個滾動的大屏幕,要實時的統(tǒng)計截至1點的時候交易量是多少,那是實時的統(tǒng)計,實時的匯總交易數(shù)據(jù),做一個匯總展示,這是一個實時數(shù)據(jù),有一筆記錄我就做一個匯總。這是多種框架并存的局面。
如果你們公司每一種應(yīng)用場景都需要的話,你可能至少要有三套系統(tǒng),有三個集群,這樣的話管理起來,運行起來非常的麻煩。是不是能設(shè)計一套系統(tǒng)解決這三個場景,而且他們是一套,這樣的話學(xué)習(xí)起來都是統(tǒng)一的,接口都是統(tǒng)一的,維護(hù)起來也是統(tǒng)一的。而不是說你要搭建三套,每一套都需要單獨學(xué)習(xí),因為它由不同的生態(tài)構(gòu)成的。這樣的話,你需要三個系統(tǒng),這三個系統(tǒng)是完全的不同的方式,你的學(xué)習(xí)成本和運維成本都會非常高。
那么我們做了一個嘗試,Spark的特點,一個是非常的高效,統(tǒng)計上看,比Mapreduce快10到100倍,從數(shù)據(jù)上可以看到,Mapreduce是非常慢的框架。快多少倍取決于具體的場景。為什么這么高效呢?第一,它是DAG的引擎,而Mapreduce也可以把它看成DAG的引擎,但是是非常簡單的,它只有兩個,點和邊。如果想做非常復(fù)雜的運算,是非常非常大量的作業(yè)。如果你用Mapreduce做的話這個要做四個作業(yè),這個是通過存儲不不同的Mapreduce作業(yè)銜接在一起的。而通用的DAG引擎,所有的數(shù)據(jù)都不需要落在這種文件系統(tǒng)里,直接可以通過流式的,或者是其它的方式銜接起來。這是Spark的一個核心的設(shè)計理念。
第二個,它可以充分的使用內(nèi)存。SparK提供了充分使用內(nèi)容的能力,可以把數(shù)據(jù)處理完之后做落到磁盤上或者是其它地方,是非常靈活的。實際上,如果你不想用內(nèi)存,可以關(guān)掉,這個時候可以做一些簡單的運算。
另外是易用的,提供了四種編程語言,代碼量也比Mapreduce要小2到5倍。現(xiàn)在有一個趨勢,就是還是編程語言越來越受歡迎,鄙視說Scala,python。
第三個是與Hadoop集成,可以讀寫hdfs/hbase,與YARN集成。
Spark核心理念,一個是RDD,彈性分布式數(shù)據(jù)集,對分布式數(shù)據(jù)抽象,你可以采用其它方式來實現(xiàn),也是沒有問題的。在RDD上,如果把這個數(shù)據(jù)轉(zhuǎn)成RDD后,它提供了豐富的編程接口。比說有map,filter等等,有多少個結(jié)點都可以擴(kuò)展。
Spark還有個非常強大的方式,就是部署方式非常的靈活,你可以運行在本地,也可以運行在standalone上,也可以部署在mesos/yarn。