Spark零基礎(chǔ)實(shí)戰(zhàn)
Spark是業(yè)界公認(rèn)的近幾年發(fā)展快、受關(guān)注度的一體化多元化的大數(shù)據(jù)計(jì)算技術(shù),可以同時(shí)滿足不同業(yè)務(wù)場景和不同數(shù)據(jù)規(guī)模的大數(shù)據(jù)計(jì)算的需要。
本書首先通過代碼實(shí)戰(zhàn)的方式對學(xué)習(xí)Spark前必須掌握的Scala內(nèi)容進(jìn)行講解并結(jié)合Spark源碼的閱讀來幫助讀者快速學(xué)習(xí)Scala函數(shù)式編程與面向?qū)ο笸昝澜Y(jié)合的編程藝術(shù),接著對Hadoop和Spark集群安裝部署以及Spark在不同集成開發(fā)環(huán)境的開發(fā)實(shí)戰(zhàn)作出了詳細(xì)的講解,然后基于大量的實(shí)戰(zhàn)案例來講解Spark核心RDD編程并深度解密RDD的密碼,并且通過實(shí)戰(zhàn)的方式詳解了TopN在Spark RDD中的實(shí)現(xiàn),為了讓讀者徹底了解Spark,本書用了大量的篇幅詳細(xì)解密了Spark的高可用性、內(nèi)核架構(gòu)、運(yùn)行機(jī)制等內(nèi)容。
Spark零基礎(chǔ)實(shí)戰(zhàn)這本書定位于零基礎(chǔ)的學(xué)員,也可以作為有一定大數(shù)據(jù)Hadoop經(jīng)驗(yàn)的從業(yè)者以及對大數(shù)據(jù)非常感興趣的學(xué)生的本Spark入門書籍。
適讀人群 :Spark零基礎(chǔ)實(shí)戰(zhàn)這本書定位于零基礎(chǔ)的學(xué)員,也可以作為有一定大數(shù)據(jù)Hadoop經(jīng)驗(yàn)的從業(yè)者以及對大數(shù)據(jù)非常感興趣的學(xué)生的第一本Spark入門書籍。
編寫內(nèi)容具有創(chuàng)新點(diǎn)及實(shí)用性。
(1)新,基于Spark 1.6.0版本的書籍,
(2)書籍徹底細(xì)膩地解析Spark入門所需的Scala語言基礎(chǔ)、Spark環(huán)境搭建、Spark應(yīng)用實(shí)戰(zhàn),并以此為基礎(chǔ)給出進(jìn)一步的擴(kuò)展知識;
(3)配備教學(xué)視頻,方便學(xué)習(xí)者多媒體方式學(xué)習(xí);
(4)全面覆蓋各種源碼、部署及開發(fā)環(huán)境的搭建,基于Scala與Java語言雙語言給出實(shí)戰(zhàn)案例及其深入解析。
大數(shù)據(jù)已經(jīng)成為公眾流行詞多年,不管在業(yè)界還是在其他領(lǐng)域都緊隨時(shí)代發(fā)展的潮流,人類社會的發(fā)展已經(jīng)進(jìn)入到大數(shù)據(jù)時(shí)代。我們生活的今天大到互聯(lián)網(wǎng)公司,小到每一個(gè)個(gè)體或者每一臺移動(dòng)設(shè)備其每天都會產(chǎn)生海量的新數(shù)據(jù),那么對于這些海量數(shù)據(jù)的處理就面臨著巨大的考驗(yàn),而在此過程中為了滿足業(yè)務(wù)需要,各類技術(shù)如雨后春筍般出現(xiàn)并得到IT企業(yè)的實(shí)踐應(yīng)用和發(fā)展,就應(yīng)對海量數(shù)據(jù)的處理框架而言,于2006年誕生的Hadoop,使業(yè)界掀起一股熱潮,它改變了企業(yè)對數(shù)據(jù)的存儲、處理和分析的過程,加速了大數(shù)據(jù)的發(fā)展,形成了自己的極其火爆的技術(shù)生態(tài)圈,并受到非常廣泛的應(yīng)用。而Spark在2009年初來源于伯克利大學(xué)的研究性項(xiàng)目,于美國加州大學(xué)伯克利分校的AMPLab實(shí)驗(yàn)室誕生,2010年實(shí)現(xiàn)開源并在2013年成為Apache的基金孵化器項(xiàng)目并在不到一年的時(shí)間成為其的項(xiàng)目,在短短幾年的時(shí)間內(nèi)獲得極速發(fā)展并被各大互聯(lián)網(wǎng)公司應(yīng)用于實(shí)際項(xiàng)目中以實(shí)現(xiàn)海量數(shù)據(jù)的處理,可以毫不夸張地講Spark是大數(shù)據(jù)時(shí)代發(fā)展的必然產(chǎn)物,勢必會成為好的大數(shù)據(jù)處理框架之一。
根據(jù)Stackoverflow調(diào)查顯示Spark是2016年IT從業(yè)者獲得薪水的技術(shù)之一,從事Spark開發(fā)的IT人員年薪達(dá)到125000美元,從事Scala開發(fā)的IT人員年薪同從事Spark的IT人員保持一致的水平,可見Spark已經(jīng)成為開發(fā)人員在大數(shù)據(jù)領(lǐng)域收入好的技術(shù)之一。了解Spark或者讀過Spark源碼的人都知道Spark主要是Scala語言開發(fā)的,而Scala語言是一門面向?qū)ο笈c函數(shù)式編程完美結(jié)合的語言。因此本書主要以零基礎(chǔ)實(shí)戰(zhàn)掌握Spark運(yùn)行機(jī)制為導(dǎo)向詳細(xì)對Scala的語法和重要知識點(diǎn)進(jìn)行實(shí)戰(zhàn)講解,通過源碼對Spark的內(nèi)核架構(gòu)進(jìn)行剖析并賦予實(shí)戰(zhàn)案例來引導(dǎo)讀者能夠在掌握Scala的同時(shí)快速進(jìn)行Spark的深入學(xué)習(xí)。
Spark基于RDD(彈性分布式數(shù)據(jù)集)實(shí)現(xiàn)了一體化、多元化的大數(shù)據(jù)處理體系,是目前熱門效的大數(shù)據(jù)領(lǐng)域的計(jì)算平臺。Spark框架完美融合了Spark SQL、Spark Streaming、MLLib、GraphX子框架,使得各子框架之間實(shí)現(xiàn)數(shù)據(jù)共享和操作,強(qiáng)大的計(jì)算能力和集成化使得Spark在大數(shù)據(jù)計(jì)算領(lǐng)域具有得天獨(dú)厚的優(yōu)勢,因此國際上很多大型互聯(lián)網(wǎng)公司均使用Spark實(shí)現(xiàn)海量數(shù)據(jù)的處理,如國內(nèi)的BAT等,有過千臺節(jié)點(diǎn)組成的集群高效快速地處理每日生成的海量數(shù)據(jù)。
Spark在大數(shù)據(jù)處理領(lǐng)域的迅猛發(fā)展,給了很多互聯(lián)網(wǎng)公司高效處理海量數(shù)據(jù)的方案,但是Spark人才的稀缺使得很多公司心有余而力不足,以至于不能將企業(yè)的生產(chǎn)力量化提高成了很多企業(yè)面臨的主要問題,大數(shù)據(jù)Spark工程師的缺少直接制約了很多公司的轉(zhuǎn)型和發(fā)展,在此情況下本書以零基礎(chǔ)實(shí)戰(zhàn)為主導(dǎo),由基礎(chǔ)部分細(xì)致地帶領(lǐng)初學(xué)者從零基礎(chǔ)入門直到深入學(xué)習(xí)Spark。本書主要面向的對象是預(yù)從事大數(shù)據(jù)領(lǐng)域的初學(xué)者、高校學(xué)生以及有一定大數(shù)據(jù)從事經(jīng)驗(yàn)的工作人員等。
本書以零基礎(chǔ)實(shí)戰(zhàn)Spark為主導(dǎo),首先實(shí)戰(zhàn)講解Scala基礎(chǔ)語法與定義、Scala面向?qū)ο缶幊、Scala函數(shù)式編程、Scala類型系統(tǒng)模式匹配、Scala因式轉(zhuǎn)換以及Scala并發(fā)編程等,基本包含了Scala所有重要內(nèi)容并且每一部分在實(shí)戰(zhàn)的同時(shí)配合Scala在Spark源碼中的應(yīng)用帶領(lǐng)讀者徹底理解Scala語言的藝術(shù)。其次對Spark源碼在不同方式下的編譯進(jìn)行演示,對Hadoop不同模式的集群搭建、Spark集群的搭建以及Spark在IDE、IntelliJ IDEA不同工具下的實(shí)戰(zhàn)和源碼導(dǎo)入均作了細(xì)致講解,相信通過源碼的學(xué)習(xí)和不同工具下對Spark程序的開發(fā)實(shí)戰(zhàn)可以幫助讀者對Spark有一個(gè)全面的理解和認(rèn)識,并能快速投入到實(shí)際開發(fā)中。然后對Spark中為重要的核心組件之一RDD(彈性分布式數(shù)據(jù)集)進(jìn)行了詳細(xì)地解析,并介紹Spark Master HA的4種策略,解密如何通過ZOOKEEPER這種企業(yè)經(jīng)常使用的策略來保證Spark Master HA。本書后一部分綜合講解了Spark內(nèi)核架構(gòu)以及實(shí)戰(zhàn)解析Spark在不同模式下的運(yùn)行原理。希望本書可以引領(lǐng)讀者細(xì)致高效地學(xué)習(xí)Spark框架,并成為企業(yè)渴求的Spark高端人才。
參與本書編寫的有王家林、孔祥瑞等。本書能順利出版,離不開化學(xué)工業(yè)出版社的大力支持與幫助,包括進(jìn)度把控、技術(shù)服務(wù)、排版等各個(gè)方面,在此表示誠摯地感謝。
在本書閱讀過程中,如發(fā)現(xiàn)任何問題或有任何疑問,可以加入本書的閱讀群(QQ:302306504)提出討論,會有專人幫忙答疑。同時(shí),該群中也會提供本書所用案例代碼。
如果讀者想要了解或者學(xué)習(xí)更多大數(shù)據(jù)的相關(guān)技術(shù),可以關(guān)注DT大數(shù)據(jù)夢工廠微信公眾號DT_Spark及QQ群437123764,或者掃描下方二維碼咨詢,也可以通過YY客戶端登錄68917580頻道直接體驗(yàn)。王家林老師的新浪微博是http://weibocom/ilovepains/ 歡迎大家在微博上進(jìn)行互動(dòng)。
由于時(shí)間倉促,書中難免存在不妥之處,請讀者諒解,并提出寶貴意見。
王家林 2016.8.13于北京
王家林,DT大數(shù)據(jù)夢工廠/Spark亞太研究院,DT大數(shù)據(jù)夢工廠創(chuàng)始人/Spark亞太研究院院長及首席專家,DT 大數(shù)據(jù)夢工廠創(chuàng)始人和首席專家,Spark 亞太研究院院長和首席專家,移動(dòng)互聯(lián)網(wǎng)和大數(shù)據(jù)技術(shù)領(lǐng)域集大成者,多家公司的技術(shù)顧問,業(yè)界技術(shù)培訓(xùn)專家。
大數(shù)據(jù)技術(shù)公益推廣人,大數(shù)據(jù)在線教育世界技術(shù)專家,Spark 大數(shù)據(jù)中國區(qū)培訓(xùn)專家。徹底研究了Spark 從0.5.0 到1.6.1 中共22 個(gè)版本的Spark 源碼,目前致力于開發(fā)全球優(yōu)化的Spark 中國版本。尤其擅長Spark 在生產(chǎn)環(huán)境下各種類型和場景故障的排除和解決,癡迷于Spark 生產(chǎn)環(huán)境下任意類型(例如Shuffle 和各種內(nèi)存問題)的Spark 程序的深度性能優(yōu)化。
從2014 年6 月24 日起,已開啟免費(fèi)的Spark 公開課《決勝大數(shù)據(jù)時(shí)代Spark100 期公益大講堂》。在2015 年12 月27 日成立DT 大數(shù)據(jù)夢工廠,開啟IMF(Impossible Mission Force)行動(dòng),率先在全球開展以Spark 為核心的,免費(fèi)為社會培養(yǎng)100 萬企業(yè)級實(shí)戰(zhàn)高級大數(shù)據(jù)人才行動(dòng)計(jì)劃,截止目前已有數(shù)千人參與到這個(gè)行動(dòng)之中。
曾負(fù)責(zé)某公司的類Hadoop 框架開發(fā)工作,是Hadoop 一站式解決方案的提供者,同時(shí)也是云計(jì)算和分布式大數(shù)據(jù)處理的較早實(shí)踐者之一,在實(shí)踐中用Hadoop 解決不同領(lǐng)域的大數(shù)據(jù)的高效處理和存儲。致力于Android、HTML5、Hadoop 等的軟、硬、云整合的一站式解決方案專家。
2007 年國內(nèi)較早從事于Android 系統(tǒng)移植、軟硬整合、框架修改、應(yīng)用程序軟件開發(fā)以及Android 系統(tǒng)測試和應(yīng)用軟件測試的技術(shù)專家。
2015年12月,在電視媒體錄制了《大數(shù)據(jù)的奧秘》,《大數(shù)據(jù)時(shí)代的九大神器》等視頻光盤。
? 2016年1月至今,直播培訓(xùn)課程Hadoop,MySQL,Linux,Scala,Java,Spark零基礎(chǔ)到高級企業(yè)級實(shí)戰(zhàn),Spark源碼解析及性能優(yōu)化,JVM性能調(diào)優(yōu),機(jī)器學(xué)習(xí)從零基礎(chǔ)到企業(yè)級實(shí)戰(zhàn)持續(xù)中。
第1章Scala光速入門1
1.1Scala基礎(chǔ)與語法入門實(shí)戰(zhàn)1
1.1.1Scala基本數(shù)據(jù)類型1
1.1.2Scala變量聲明2
1.1.3算術(shù)操作符介紹2
1.1.4條件語句5
1.1.5循環(huán)6
1.1.6異常控制8
1.2Scala中Array、Map等數(shù)據(jù)結(jié)構(gòu)實(shí)戰(zhàn)10
1.2.1定長數(shù)組和可變數(shù)組10
1.2.2數(shù)組常用算法10
1.2.3Map映射11
1.2.4Tuple元組12
1.2.5List列表12
1.2.6Set集合14
1.2.7Scala集合方法大全15
1.2.8綜合案例及Spark源碼解析17
1.3小結(jié)18
第2章Scala面向?qū)ο髲氐拙癝park源碼閱讀19
2.1Scala面向?qū)ο笤斀?9
2.1.1Scala中的class、object初介紹19
2.1.2主構(gòu)造器與輔助構(gòu)造器22
2.1.3類的字段和方法徹底精通23
2.1.4抽象類、接口的實(shí)戰(zhàn)詳解24
2.1.5Scala Option類詳解26
2.1.6object的提取器27
2.1.7Scala的樣例類實(shí)戰(zhàn)詳解27
2.2Scala綜合案例及Spark源碼解析28
2.3小結(jié)29
第3章Scala函數(shù)式編程徹底精通及Spark源碼閱讀30
3.1函數(shù)式編程概述30
3.2函數(shù)定義35
3.3函數(shù)式對象37
3.4本地函數(shù)41
3.5頭等函數(shù)42
3.6函數(shù)字面量和占位符43
3.6.1Scala占位符43
3.6.2函數(shù)字面量43
3.6.3部分應(yīng)用函數(shù)44
3.7閉包和Curring46
3.8高階函數(shù)49
3.9從Spark源碼角度解析Scala函數(shù)式編程55
3.10小結(jié)57
第4章Scala模式匹配、類型系統(tǒng)徹底精通與Spark源碼閱讀58
4.1模式匹配語法58
4.2模式匹配實(shí)戰(zhàn)59
4.2.1模式匹配基礎(chǔ)實(shí)戰(zhàn)59
4.2.2數(shù)組、元祖實(shí)戰(zhàn)59
4.2.3Option實(shí)戰(zhàn)60
4.2.4提取器60
4.2.5Scala異常處理與模式匹配61
4.2.6sealed密封類62
4.3類型系統(tǒng)62
4.3.1泛型62
4.3.2邊界63
4.3.3協(xié)變與逆變63
4.4Spark源碼閱讀64
4.5小結(jié)65
第5章Scala隱式轉(zhuǎn)換等徹底精通及Spark源碼閱讀66
5.1隱式轉(zhuǎn)換66
5.1.1隱式轉(zhuǎn)換的使用條件66
5.1.2隱式轉(zhuǎn)換實(shí)例66
5.2隱式類68
5.3隱式參數(shù)詳解68
5.4隱式值69
5.5Spark源碼閱讀解析69
5.6小結(jié)70
第6章并發(fā)編程及Spark源碼閱讀71
6.1并發(fā)編程徹底詳解71
6.1.1actor工作模型71
6.1.2發(fā)送消息72
6.1.3回復(fù)消息74
6.1.4actor創(chuàng)建74
6.1.5用上下文context創(chuàng)建actor75
6.1.6用ActorSystem創(chuàng)建actor76
6.1.7用匿名類創(chuàng)建actor76
6.1.8actor生命周期77
6.1.9終止actor78
6.1.10actor實(shí)戰(zhàn)80
6.2小結(jié)82
第7章源碼編譯83
7.1Windows下源碼編譯83
7.1.1下載Spark源碼83
7.1.2Sbt方式84
7.1.3Maven方式89
7.1.4需要注意的幾個(gè)問題90
7.2Ubuntu下源碼編譯92
7.2.1下載Spark源碼93
7.2.2Sbt方式95
7.2.3Maven方式96
7.2.4makedistribution.sh腳本方式98
7.2.5需要注意的幾個(gè)問題99
7.3小結(jié)100
第8章Hadoop分布式集群環(huán)境搭建101
8.1搭建Hadoop單機(jī)環(huán)境101
8.1.1安裝軟件下載101
8.1.2Ubuntu系統(tǒng)的安裝101
8.1.3Hadoop集群的安裝和設(shè)置109
8.1.4Hadoop單機(jī)模式下運(yùn)行WordCount示例113
8.2Hadoop偽分布式環(huán)境115
8.2.1Hadoop偽分布式環(huán)境搭建115
8.2.2Hadoop偽分布式模式下運(yùn)行WordCount示例117
8.3Hadoop完全分布式環(huán)境120
8.3.1Hadoop完全分布式環(huán)境搭建120
8.3.2Hadoop完全分布式模式下運(yùn)行WordCount示例123
8.4小結(jié)125
第9章精通Spark集群搭建與測試127
9.1Spark集群所需軟件的安裝127
9.1.1安裝JDK127
9.1.2安裝Scala130
9.2Spark環(huán)境搭建132
9.2.1Spark單機(jī)與單機(jī)偽分布式環(huán)境132
9.2.2Spark Standalone集群環(huán)境搭建與配置135
9.2.3Spark Standalone環(huán)境搭建的驗(yàn)證136
9.3Spark集群的測試137
9.3.1通過sparkshell腳本進(jìn)行測試137
9.3.2通過sparksubmit腳本進(jìn)行測試145
9.4小結(jié)145
第10章Scala IDE開發(fā)Spark程序?qū)崙?zhàn)解析146
10.1Scala IDE安裝146
10.1.1Ubuntu系統(tǒng)下安裝146
10.1.2Windows系統(tǒng)下安裝147
10.2ScalaIDE開發(fā)重點(diǎn)步驟詳解148
10.3Wordcount創(chuàng)建實(shí)戰(zhàn)152
10.4Spark源碼導(dǎo)入Scala IDE154
10.5小結(jié)164
第11章實(shí)戰(zhàn)詳解IntelliJ IDEA下的Spark程序開發(fā)165
11.1IDEA安裝165
11.1.1Ubuntu系統(tǒng)下安裝165
11.1.2Windows系統(tǒng)下安裝167
11.2IDEA開發(fā)重點(diǎn)步驟詳解168
11.2.1環(huán)境配置168
11.2.2項(xiàng)目創(chuàng)建170
11.2.3Spark包引入174
11.3Wordcount創(chuàng)建實(shí)戰(zhàn)174
11.4IDEA導(dǎo)入Spark源碼177
11.5小結(jié)183
第12章Spark簡介184
12.1Spark發(fā)展歷史184
12.2Spark在國內(nèi)外的使用185
12.3Spark生態(tài)系統(tǒng)簡介188
12.3.1Hadoop生態(tài)系統(tǒng)189
12.3.2BDAS生態(tài)系統(tǒng)195
12.3.3其他199
12.4小結(jié)199
第13章Spark RDD解密200
13.1淺談RDD200
13.2創(chuàng)建RDD的幾種常用方式204
13.3Spark RDD API解析及其實(shí)戰(zhàn)206
13.4RDD的持久化解析及其實(shí)戰(zhàn)217
13.5小結(jié)218
第14章Spark程序之分組TopN開發(fā)實(shí)戰(zhàn)解析219
14.1分組TopN動(dòng)手實(shí)戰(zhàn)219
14.1.1Java之分組TopN開發(fā)實(shí)戰(zhàn)219
14.1.2Scala之分組TopN開發(fā)實(shí)戰(zhàn)226
14.2Scala之分組TopN運(yùn)行原理解密232
14.2.1textFile232
14.2.2map234
14.2.3groupByKey234
14.3小結(jié)237
第15章MasterHA工作原理解密238
15.1Spark需要Master HA的原因238
15.2Spark Master HA的實(shí)現(xiàn)238
15.3Spark和ZOOKEEPER的協(xié)同工作機(jī)制240
15.4ZOOKEEPER實(shí)現(xiàn)應(yīng)用實(shí)戰(zhàn)242
15.5小結(jié)247
第16章Spark內(nèi)核架構(gòu)解密248
16.1Spark的運(yùn)行過程248
16.1.1SparkContext的創(chuàng)建過程248
16.1.2Driver的注冊過程249
16.1.3Worker中任務(wù)的執(zhí)行254
16.1.4任務(wù)的調(diào)度過程255
16.1.5Job執(zhí)行結(jié)果的產(chǎn)生257
16.2小結(jié)259
第17章Spark運(yùn)行原理實(shí)戰(zhàn)解析260
17.1用戶提交程序Driver端解析260
17.1.1SparkConf解析263
17.1.2SparkContext解析264
17.1.3DAGScheduler創(chuàng)建271
17.1.4TaskScheduler創(chuàng)建272
17.1.5SchedulerBackend創(chuàng)建273
17.1.6Stage劃分與TaskSet生成274
17.1.7任務(wù)提交280
17.2Spark運(yùn)行架構(gòu)解析283
17.2.1Spark基本組件介紹283
17.2.2Spark的運(yùn)行邏輯285
17.3Spark在不同集群上的運(yùn)行架構(gòu)291
17.3.1Spark在Standalone模式下的運(yùn)行架構(gòu)291
17.3.2Spark on yarn的運(yùn)行架構(gòu)294
17.3.3Spark在不同模式下的應(yīng)用實(shí)戰(zhàn)297
17.4Spark運(yùn)行架構(gòu)的實(shí)戰(zhàn)解析300
17.5小結(jié)307