內容簡介
本書基於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.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.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.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.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.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.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.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