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