Spark 海量數據處理 : 技術詳解與平臺實戰
內容描述
本書基於Spark發行版2.4.4寫作而成,包含大量的實例與一個完整項目,層次分明,循序漸進。全書分為3部分,涵蓋了技術理論與實戰,讀者可以從實戰中鞏固學習到的知識。第一部分主要圍繞BDAS(伯克利數據分析棧),不僅介紹瞭如何開發Spark應用的基礎內容,還介紹了Structured Streaming、Spark機器學習、Spark圖挖掘、Spark深度學習等高級主題,此外還介紹了Alluxio系統。第二部分實現了一個企業背景調查系統,比較新穎的是,該系統借鑒了數據湖與Lambda架構的思想,涵蓋了批處理、流處理應用開發,並加入了一些開源組件來滿足需求,既是對本書第一部分很好的鞏固,又完整呈現了一個實時大數據應用的開發過程。第三部分是對全書的總結和展望。
本書適合準備學習Spark的開發人員和數據分析師,以及準備將Spark應用到實際項目中的開發人員和管理人員閱讀,也適合電腦相關專業的高年級本科生和研究生學習和參考,對於具有一定的Spark使用經驗並想進一步提升的數據科學從業者也是很好的參考資料。
目錄大綱
第一部分基礎篇
第1章序篇2
1.1 Spark與BDAS 3
1.2 Databricks 4
1.3如何通過GitHub向Spark貢獻代碼5
1.4如何選擇Spark編程語言8
1.5函數式編程思想9
1.6小結12
第2章Spark編程13
2.1 Spark架構13
2.2 Spark 2.x與Spark 3.x 15
2.2.1 Tungsten項目16
2.2.2統一Dataset和DataFrame接口20
2.2.3新一代流處理技術:Structured Streaming與持續型應用21
2.2.4 Hydrogen項目和Spark 3.x 22
2.3部署Spark 26
2.3.1 Spark on YARN 27
2.3.2 Spark on Mesos 28
2.3.3 Spark Standalone 29
2.3.4 Spark on Kubernetes 30
2.3.5安裝Spark 31
2.3.6提交作業31
2.3.7 Spark Shell 33
2.3.8初始化SparkSession 34
2.4 RDD與算子34
2.4.1 RDD 34
2.4.2創建RDD 36
2.4.3轉換算子38
2.4.4行動算子43
2.4.5 RDD血統與Spark容錯45
2.5 Spark Shuffle 47
2.5.1 Hash Shuffle 47
2.5.2 Sort-based Shuffle 49
2.6共享變量50
2.6.1廣播變量50
2.6.2累加器53
2.7 Spark的多語言支持55
2.7.1 PySpark 55
2 .7.2 SparkR 56
2.8 Spark性能調優56
2.8.1硬件配置與資源管理平台57
2.8.2參數調優與應用調優57
2.9使用Jupyter Notebook基於Spark探索數據:蒙特卡羅方法預測股票價格64
2.9.1 Jupyter Notebook 64
2.9.2用蒙特卡羅方法預測股票價格67
2.10小結70
第3章Spark統一編程接口:DataFrame、Dataset和Spark SQL 71
3.1 Catalyst優化器72
3.1.1 SQL抽象語法樹72
3.1.2從ULEP到RLEP的過程73
3.1.3調優RLEP 73
3.1.4全階段代碼生成74
3.2 DataFrame API 75
3.2.1創建DataFrame 75
3.2.2查詢77
3.2.3窗口函數80
3.2.4用戶自定義函數83
3.2.5寫入85
3.3 Dataset API 86
3.3.1 RDD、DataFrame和Dataset 87
3.3.2安全類型的UDAF 88
3.4 Spark SQL 89
3.4.1創建臨時視圖90
3.4.2使用Hive元數據90
3 .4.3查詢語句91
3.4.4函數94
3.4.5用戶自定義函數97
3.5 Google Dremel與列式存儲97
3.5.1 Apache Parquet 99
3.5.2 Apache ORC 100
3.5.3 Apache CarbonData 100
3.5.4對比測試101
3.6使用Spark SQL進行數據探索102
3.7小結107
第4章Spark流處理:Spark Streaming與Structured Streaming 108
4.1一個Spark Streaming流處理的例子109
4.2消息送達保證110
4.3 Google MillWheel系統和Google Dataflow模型114
4.3.1 Google MillWheel設計思想114
4.3.2 Google MillWheel如何實現“恰好一次”消息送達語義114
4.3.3 Google MillWheel對亂序數據與晚到數據的處理115
4.3.4 Google Dataflow:流處理和批處理的統一與取捨117
4.4 Spark Streaming 122
4.4.1關鍵抽象與架構123
4.4.2無狀態的轉換算子125
4.4.3有狀態的轉換算子129
4.4.4輸入與輸出134
4.4.5 Spark Streaming與Spark SQL 138
4.4.6容錯與結果正確性139
4.4. 7性能調優141
4.5 Structured Streaming 144
4.5.1關鍵抽象與架構144
4.5.2操作147
4.5.3輸入和輸出154
4.5.4股票交易價格實時分析157
4. 6流處理技術對比162
4.7小結163
第5章Spark圖計算:GraphX 164
5.1圖模式164
5.1.1圖結構164
5.1.2圖存儲165
5.1.3圖數據庫168
5.1.4圖挖掘技術169
5.1.5屬性圖與RDF 170
5.2生成圖171
5.2.1從已有數據中生成172
5.2.2通過GraphGenerators生成174
5.3圖算子175
5.3.1屬性算子175
5.3.2結構算子175
5.3.3連接算子175
5.3.4 aggregateMessages 176
5.4 Pregel API 177
5.4.1圖分區177
5.4.2像頂點一樣思考180
5.4.3用戶自定義函數182
5.4.4 PageRank的GraphX實現183
5.4.5標籤傳播算法186
5. 5 SQL on Graph 187
5.5.1生成圖188
5.5.2 SQL查詢189
5.5.3模式發現190
5.5.4一些GraphX已經有的算法191
5.5.5一些GraphX沒有的算法191
5.5.6 AggregateMessages 192
5.6 n度鄰居頂點算法193
5.7小結196
第6章Spark機器學習:MLlib 197
6.1機器學習197
6.1.1典型的機器學習工作流198
6.1.2機器學習任務的學習類型199
6.2 Spark MLlib與Spark ML 201
6.3數據預處理205
6.3.1數據標準化205
6. 3.2缺失值處理207
6.3.3特徵抽取208
6.3.4特徵選擇212
6.4分類算法應用214
6.4.1決策樹214
6.4.2隨機森林217
6.4. 3人體狀態監測器218
6.4.4集成學習223
6.4.5梯度提升決策樹224
6.5聚類算法應用225
6.5.1物以類聚225
6.5.2 k均值聚類算法226
6.5.3實現227
6.6推薦系統應用230
6.6.1基於用戶的協同過濾231
6.6.2基於商品的協同過濾233
6.6.3兩種協同過濾的對比235
6. 6.4基於模型的協同過濾236
6.6.5 Movielens電影推薦系統237
6.7訓練之後238
6.7.1模型評估239
6.7.2交叉驗證與超參調優241
6.8流式機器學習242
6.8.1流回歸242
6.8.2流聚類244
6.8.3用流處理應用來監控模型245
6.9小結249
第7章Spark深度學習:Deeplearning4j 250
7.1常見的深度學習框架251
7.2 Deeplearning4j 252
7.3卷積神經網絡252
7.3.1理解卷積神經網絡252
7.3.2用Deeplearning4j訓練卷積神經網絡254
7.4循環神經網絡257
7.4.1理解循環神經網絡258
7 .4.2用Deeplearning4j訓練循環神經網絡262
7.5自動編碼器264
7.5.1理解自動編碼器264
7.5.2用Deeplearning4j訓練自動編碼器267
7.6使用GPU 269
7.7小結270
第8章分佈式存儲:Alluxio 271
8.1 Alluxio架構271
8.1.1 Alluxio的組成部分273
8.1.2虛擬的Alluxio 273
8.1.3統一而透明的命名空間274
8.2快速上手Alluxio 275
8.2.1安裝Alluxio 275
8.2.2 Alluxio配置276
8.2.3 Alluxio血統機制277
8.3與上層框架集成277
8.3.1與Spark集成278
8.3.2與Presto集成279
8.3.3與HBase集成280
8.4與底層存儲系統集成281
8.4.1與Ceph集成281
8.4.2掛載其他文件系統281
8.5如何訪問Alluxio 282
8.6 Alluxio應用案例283
8.6.1攜程網283
8.6.2滴滴出行284
8.6.3陌陌286
8.7小結288
第二部分應用篇
第9章企業數據湖與Lambda架構290
9.1數據湖290
9.1.1數據的湖泊290
9.1.2數據湖要解決的問題291
9.1.3數據湖與數據倉庫對比292
9.1.4數據湖如何工作293
9.2 Lambda架構293
9.2.1批處理層294
9.2.2服務層295
9.2.3速度層295
9.2.4 Lambda架構296
9.2.5 Lambda架構的原則297
9.3基於Lambda架構的數據湖分層設計297
9.3.1數據獲取層298
9.3.2消息層299
9.3.3數據攝取層300
9.3.4數據存儲層300
9.3.5 Lambda層301
9.4 Lambda架構的應用301
9.4.1搜索引擎301
9.4.2 Druid 302
9 .5構建Lambda架構的技術303
9.6小結304
第10章大數據企業動態背景調查平台305
10.1企業背景調查305
10.2基於大數據的企業動態背景調查308
10.2.1企業行為信息308
10.2.2企業關聯方分析311
10.3數據採集與數據字典313
10.4企業背景調查平台需求317
10.4.1企業關聯圖譜展示317
10.4.2企業風險指標計算318
10.5企業關聯圖譜的模式318
10.6傳統數據倉庫架構320
10.7小結321
第11章平台設計322
11.1平台架構322
11.1.1數據源323
11.1.2數據管道323
11.1.3速度層325
11.1.4批處理層325
11.1.5服務層325
11.1.6查詢層325
11.1.7可視化組件325
11.2物理拓撲326
11.3服務層圖數據庫設計326
11.4項目規劃327
11.5小結327
第12章數據管道層328
12.1安裝並配置canal 328
12.2實現Kafka生產者330
12 .3安裝並配置Flume 335
12.4小結336
第13章速度層337
13.1速度層輸入337
13.1.1類型1 338
13.1.2類型2 338
13.1.3類型3 339
13 .1.4類型4 340
13.2 Cypher基礎341
13.2.1寫入342
13.2.2讀取343
13.2.3刪除344
13.3生成Cypher語句345
13.3.1類型1 345
13.3.2類型2 346
13.3.3類型3 346
13.3.4類型4 346
13.3.5實現347
13.4整合Structured Streaming 352
13.4.1 Neo4jWriter 353
13.4. 2啟動流354
13.5小結355
第14章批處理層356
14.1自融風險監測356
14.2生成主數據集357
14.2.1全量與增量358
14.2.2合併359
14.2.3數據治理361
14.3用GraphX計算企業自融風險值363
14.4導入HBase 364
14.5調度中心366
14.5.1 Airflow 366
14.5.2配置368
14.6小結370
第15章服務層與查詢層371
15.1不僅僅是合併371
15.1.1 NetworkX 372
15.1.2計算流程372
15.2接口開發372
15.3小結376
第三部分總結篇
第16章總結和展望378
16.1統一的大數據處理接口378
16 .1.1 Unified Spark 378
16.1.2 Apache Beam 379
16.2 Kappa架構380
16.3大數據處理技術382
16.3.1 Apache Flink 382
16.3.2 Apache Apex 383
16.3.3 Ray 384
16.4 Spark未來發展方向386
作者介紹
範東來,北京航空航天大學碩士,泛山科技聯合創始人,Spark Contributor、SupersetContributor,架構師,技術圖書作者和譯者,著有《Hadoop海量數據處理》,譯有《解讀NoSQL》《NoSQL**指南》《神經網絡算法和實現》《Hadoop深度學習》《精通數據科學算法》等,另譯有暢銷小說《巧克力時代:因為這是我的血脈》。