- Spark核心技術(shù)與高級(jí)應(yīng)用
- 于俊等
- 614字
- 2019-01-01 01:24:29
第1章
Spark簡(jiǎn)介
上善若水,水善利萬物而不爭(zhēng)。
——《道德經(jīng)》第八章
數(shù)據(jù)一如水,無色無味,非方非圓,以百態(tài)存于自然,于自然無違也。綿綿密密,微則無聲,巨則洶涌;與人無爭(zhēng)卻又容納萬物。
生活離不開水,同樣離不開數(shù)據(jù),我們被數(shù)據(jù)包圍,在數(shù)據(jù)中生活。當(dāng)數(shù)據(jù)越來越多時(shí),就成了大數(shù)據(jù)。
想要理解大數(shù)據(jù),就需要理解大數(shù)據(jù)相關(guān)的查詢、處理、機(jī)器學(xué)習(xí)、圖計(jì)算和統(tǒng)計(jì)分析等,Spark作為新一代輕量級(jí)大數(shù)據(jù)快速處理平臺(tái),集成了大數(shù)據(jù)相關(guān)的各種能力,是理解大數(shù)據(jù)的首選。
現(xiàn)在,讓我們以向大師致敬的方式開始學(xué)習(xí)之旅,向Doug Cutting和Matei Zaharia兩位大師致敬!
1.1 什么是Spark
說起大數(shù)據(jù),很多人會(huì)想起Doug Cutting以自己兒子玩具小象命名的開源項(xiàng)目Hadoop。Hadoop解決了大多數(shù)批處理工作負(fù)載問題,成為了大數(shù)據(jù)時(shí)代企業(yè)的首選技術(shù)。但隨著大數(shù)據(jù)時(shí)代不可逆的演進(jìn),人們發(fā)現(xiàn),由于一些限制,Hadoop對(duì)一些工作負(fù)載并不是最優(yōu)選擇,比如:
□缺少對(duì)迭代的支持;
□中間數(shù)據(jù)需輸出到硬盤存儲(chǔ),產(chǎn)生了較高的延遲。
探其究竟,MapReduce設(shè)計(jì)上的約束比較適合處理離線數(shù)據(jù),在實(shí)時(shí)查詢和迭代計(jì)算上存在較大的不足,而隨著具體業(yè)務(wù)的發(fā)展,業(yè)界對(duì)實(shí)時(shí)查詢和迭代計(jì)算有更多的需求。
2009年,美國(guó)加州大學(xué)伯克利分校實(shí)驗(yàn)室小伙伴們基于AMPLab的集群計(jì)算平臺(tái),立足內(nèi)存計(jì)算,從多迭代批量處理出發(fā),兼顧數(shù)據(jù)倉庫、流處理、機(jī)器學(xué)習(xí)和圖計(jì)算等多種計(jì)算范式,正式將Spark作為研究項(xiàng)目,并于2010年進(jìn)行了開源。
什么是Spark?Spark作為Apache頂級(jí)的開源項(xiàng)目,是一個(gè)快速、通用的大規(guī)模數(shù)據(jù)處理引擎,和Hadoop的MapReduce計(jì)算框架類似,但是相對(duì)于MapReduce,Spark憑借其可伸縮、基于內(nèi)存計(jì)算等特點(diǎn),以及可以直接讀寫Hadoop上任何格式數(shù)據(jù)的優(yōu)勢(shì),進(jìn)行批處理時(shí)更加高效,并有更低的延遲。相對(duì)于“one stack to rule them all”的目標(biāo),實(shí)際上,Spark已經(jīng)成為輕量級(jí)大數(shù)據(jù)快速處理的統(tǒng)一平臺(tái),各種不同的應(yīng)用,如實(shí)時(shí)流處理、機(jī)器學(xué)習(xí)、交互式查詢等,都可以通過Spark建立在不同的存儲(chǔ)和運(yùn)行系統(tǒng)上,下面我們來具體認(rèn)識(shí)一下Spark。
1.1.1 概述
隨著互聯(lián)網(wǎng)的高速發(fā)展,以大數(shù)據(jù)為核心的計(jì)算框架不斷出現(xiàn),從支持離線的MapReduce席卷全球,到支持在線處理的Storm異軍突起,支持迭代計(jì)算的Spark攻城拔寨,支持高性能數(shù)據(jù)挖掘的MPI深耕細(xì)作。各種框架誕生于不同的實(shí)驗(yàn)室或者公司,各有所長(zhǎng),各自解決了某一類問題,而在一些互聯(lián)網(wǎng)公司中,百家爭(zhēng)鳴,各種框架同時(shí)被使用,比如作者所在公司的大數(shù)據(jù)團(tuán)隊(duì),模型訓(xùn)練和數(shù)據(jù)處理采用MapReduce框架(包括基于Hive構(gòu)建的數(shù)據(jù)倉庫查詢的底層實(shí)現(xiàn)),實(shí)時(shí)性要求較高的線上業(yè)務(wù)采取Storm,日志處理以及個(gè)性化推薦采取Spark,這些框架都部署在統(tǒng)一的數(shù)據(jù)平臺(tái)上,共享集群存儲(chǔ)資源和計(jì)算資源,形成統(tǒng)一的輕量級(jí)彈性計(jì)算平臺(tái)。
1.1.2 Spark大數(shù)據(jù)處理框架
相較于國(guó)內(nèi)外較多的大數(shù)據(jù)處理框架,Spark以其低延時(shí)的出色表現(xiàn),正在成為繼Hadoop的MapReduce之后,新的、最具影響的大數(shù)據(jù)框架之一,圖1-1所示為以Spark為核心的整個(gè)生態(tài)圈,最底層為分布式存儲(chǔ)系統(tǒng)HDFS、Amazon S3、Hypertable,或者其他格式的存儲(chǔ)系統(tǒng)(如HBase);資源管理采用Mesos、YARN等集群資源管理模式,或者Spark自帶的獨(dú)立運(yùn)行模式,以及本地運(yùn)行模式。在Spark大數(shù)據(jù)處理框架中,Spark為上層多種應(yīng)用提供服務(wù)。例如,Spark SQL提供SQL查詢服務(wù),性能比Hive快3~50倍;MLlib提供機(jī)器學(xué)習(xí)服務(wù);GraphX提供圖計(jì)算服務(wù);Spark Streaming將流式計(jì)算分解成一系列短小的批處理計(jì)算,并且提供高可靠和吞吐量服務(wù)。值得說明的是,無論是Spark SQL、Spark Streaming、GraphX還是MLlib,都可以使用Spark核心API處理問題,它們的方法幾乎是通用的,處理的數(shù)據(jù)也可以共享,不僅減少了學(xué)習(xí)成本,而且其數(shù)據(jù)無縫集成大大提高了靈活性。

圖1-1 以Spark為核心的輕量級(jí)大數(shù)據(jù)處理框架
基于Hadoop的資源管理器YARN實(shí)際上是一個(gè)彈性計(jì)算平臺(tái),作為統(tǒng)一的計(jì)算資源管理框架,不僅僅服務(wù)于MapReduce計(jì)算框架,而且已經(jīng)實(shí)現(xiàn)了多種計(jì)算框架進(jìn)行統(tǒng)一管理。這種共享集群資源的模式帶來了很多好處。
□資源利用率高。多種框架共享資源的模式有效解決了由于應(yīng)用程序數(shù)量的不均衡性導(dǎo)致的高峰時(shí)段任務(wù)比較擁擠,空閑時(shí)段任務(wù)比較空閑的問題;同時(shí)均衡了內(nèi)存和CPU等資源的利用。
□實(shí)現(xiàn)了數(shù)據(jù)共享。隨著數(shù)據(jù)量的增加,數(shù)據(jù)移動(dòng)成本越來越高,網(wǎng)絡(luò)帶寬、磁盤空間、磁盤IO都會(huì)成為瓶頸,在分散數(shù)據(jù)的情況下,會(huì)造成任務(wù)執(zhí)行的成本提高,獲得結(jié)果的周期變長(zhǎng),而數(shù)據(jù)共享模式可以讓多種框架共享數(shù)據(jù)和硬件資源,大幅度減少數(shù)據(jù)分散帶來的成本。
□有效降低運(yùn)維和管理成本。相比較一種計(jì)算框架需要一批維護(hù)人員,而運(yùn)維人員較多又會(huì)帶來的管理成本的上升;共享模式只需要少數(shù)的運(yùn)維人員和管理人員即可完成多個(gè)框架的統(tǒng)一運(yùn)維管理,便于運(yùn)維優(yōu)化和運(yùn)維管理策略統(tǒng)一執(zhí)行。
總之,Spark憑借其良好的伸縮性、快速的在線處理速度、具有Hadoop基因等一系列優(yōu)勢(shì),迅速成為大數(shù)據(jù)處理領(lǐng)域的佼佼者。Apache Spark已經(jīng)成為整合以下大數(shù)據(jù)應(yīng)用的標(biāo)準(zhǔn)平臺(tái):
□交互式查詢,包括SQL;
□實(shí)時(shí)流處理;
□復(fù)雜的分析,包括機(jī)器學(xué)習(xí)、圖計(jì)算;
□批處理。
1.1.3 Spark的特點(diǎn)
作為新一代輕量級(jí)大數(shù)據(jù)快速處理平臺(tái),Spark具有以下特點(diǎn):
□快速。Spark有先進(jìn)的DAG執(zhí)行引擎,支持循環(huán)數(shù)據(jù)流和內(nèi)存計(jì)算;Spark程序在內(nèi)存中的運(yùn)行速度是Hadoop MapReduce運(yùn)行速度的100倍,在磁盤上的運(yùn)行速度是Hadoop MapReduce運(yùn)行速度的10倍,如圖1-2所示。

圖1-2 Hadoop MapReduce和Spark在內(nèi)存中的運(yùn)行速度比較
□易用。Spark支持使用Java、Scala、Python語言快速編寫應(yīng)用,提供超過80個(gè)高級(jí)運(yùn)算符,使得編寫并行應(yīng)用程序變得容易。
□通用。Spark可以與SQL、Streaming以及復(fù)雜的分析良好結(jié)合。基于Spark,有一系列高級(jí)工具,包括Spark SQL、MLlib(機(jī)器學(xué)習(xí)庫)、GraphX和Spark Streaming,支持在一個(gè)應(yīng)用中同時(shí)使用這些架構(gòu),如圖1-3所示。

圖1-3 Spark高級(jí)工具架構(gòu)
□有效集成Hadoop。Spark可以指定Hadoop,YARN的版本來編譯出合適的發(fā)行版本,Spark也能夠很容易地運(yùn)行在EC2、Mesos上,或以Standalone模式運(yùn)行,并從HDFS、HBase、Cassandra和其他Hadoop數(shù)據(jù)源讀取數(shù)據(jù)。
1.1.4 Spark應(yīng)用場(chǎng)景
Spark使用了內(nèi)存分布式數(shù)據(jù)集,除了能夠提供交互式查詢外,還優(yōu)化了迭代工作負(fù)載,在Spark SQL、Spark Streaming、MLlib、GraphX都有自己的子項(xiàng)目。在互聯(lián)網(wǎng)領(lǐng)域,Spark在快速查詢、實(shí)時(shí)日志采集處理、業(yè)務(wù)推薦、定制廣告、用戶圖計(jì)算等方面都有相應(yīng)的應(yīng)用。國(guó)內(nèi)的一些大公司,比如阿里巴巴、騰訊、Intel、網(wǎng)易、科大訊飛、百分點(diǎn)科技等都有實(shí)際業(yè)務(wù)運(yùn)行在Spark平臺(tái)上。下面簡(jiǎn)要說明Spark在各個(gè)領(lǐng)域中的用途。
□快速查詢系統(tǒng),基于日志數(shù)據(jù)的快速查詢系統(tǒng)業(yè)務(wù)構(gòu)建于Spark之上,利用其快速查詢以及內(nèi)存表等優(yōu)勢(shì),能夠承擔(dān)大部分日志數(shù)據(jù)的即時(shí)查詢工作;在性能方面,普遍比Hive快2~10倍,如果使用內(nèi)存表的功能,性能將會(huì)比Hive快百倍。
□實(shí)時(shí)日志采集處理,通過Spark Streaming實(shí)時(shí)進(jìn)行業(yè)務(wù)日志采集,快速迭代處理,并進(jìn)行綜合分析,能夠滿足線上系統(tǒng)分析要求。
□業(yè)務(wù)推薦系統(tǒng),使用Spark將業(yè)務(wù)推薦系統(tǒng)的小時(shí)和天級(jí)別的模型訓(xùn)練轉(zhuǎn)變?yōu)榉昼娂?jí)別的模型訓(xùn)練,有效優(yōu)化相關(guān)排名、個(gè)性化推薦以及熱點(diǎn)點(diǎn)擊分析等。
□定制廣告系統(tǒng),在定制廣告業(yè)務(wù)方面需要大數(shù)據(jù)做應(yīng)用分析、效果分析、定向優(yōu)化等,借助Spark快速迭代的優(yōu)勢(shì),實(shí)現(xiàn)了在“數(shù)據(jù)實(shí)時(shí)采集、算法實(shí)時(shí)訓(xùn)練、系統(tǒng)實(shí)時(shí)預(yù)測(cè)”的全流程實(shí)時(shí)并行高維算法,支持上億的請(qǐng)求量處理;模擬廣告投放計(jì)算效率高、延遲小,同MapReduce相比延遲至少降低一個(gè)數(shù)量級(jí)。
□用戶圖計(jì)算。利用GraphX解決了許多生產(chǎn)問題,包括以下計(jì)算場(chǎng)景:基于度分布的中樞節(jié)點(diǎn)發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)、基于三角形計(jì)數(shù)的關(guān)系衡量、基于隨機(jī)游走的用戶屬性傳播等。
- 大數(shù)據(jù)技術(shù)基礎(chǔ)
- 數(shù)據(jù)庫應(yīng)用實(shí)戰(zhàn)
- Microsoft SQL Server企業(yè)級(jí)平臺(tái)管理實(shí)踐
- 正則表達(dá)式必知必會(huì)
- 金融商業(yè)算法建模:基于Python和SAS
- HikariCP連接池實(shí)戰(zhàn)
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 區(qū)域云計(jì)算和大數(shù)據(jù)產(chǎn)業(yè)發(fā)展:浙江樣板
- Oracle高性能SQL引擎剖析:SQL優(yōu)化與調(diào)優(yōu)機(jī)制詳解
- 中文版Access 2007實(shí)例與操作
- Hands-On Deep Learning for Games
- Google Cloud Platform for Architects
- Unity Game Development Blueprints
- 大數(shù)據(jù)技術(shù)體系詳解:原理、架構(gòu)與實(shí)踐
- Machine Learning for Mobile