內容簡介
《Spark性能最佳化實戰:突破性能瓶頸,遨遊數據重洋》全面、系統、深入地介紹Apache Spark性能最佳化的相關技術和策略,涵蓋從Spark性能最佳化的基礎知識到核心技術,再到套用實踐的方方面面。本書不但系統地介紹各種監控工具的使用,而且還結合實戰案例,詳細介紹Spark性能最佳化的各種經驗和技巧,提升讀者的實際套用技能。
《Spark性能最佳化實戰:突破性能瓶頸,遨遊數據重洋》共8章。第1章從性能最佳化的基本概念出發,介紹Spark的基礎知識,並介紹如何進行性能最佳化;第2章介紹Spark性能最佳化的幾個方面,包括程式設計最佳化、資源最佳化、網路通信最佳化和數據讀寫最佳化等;第3章深入介紹Spark任務執行過程最佳化;第4章介紹Spark SQL性能最佳化;第5章結合實戰案例全面解析Spark性能最佳化的核心技術與套用;第6章詳細介紹不同套用場景的性能最佳化策略;第7章介紹Spark集成Hadoop、Kafka和Elasticsearch使用時的性能最佳化,從而提供更實用的Spark性能提升方案;第8章介紹Spark應用程式開發與最佳化,以及集群管理實踐。
《Spark性能最佳化實戰:突破性能瓶頸,遨遊數據重洋》內容豐富,講解深入淺出,適合Apache Spark開發人員、數據工程師和數據科學家閱讀,也適合需要處理大規模數據集和對Spark性能最佳化感興趣的技術人員閱讀,還可作為高等院校大數據專業的教材和相關培訓機構的教學用書。
圖書目錄
目 錄
第1章 性能最佳化基礎 1
1.1 Spark簡介 1
1.2 什麼是Spark性能最佳化 1
1.3 Spark應用程式性能指標 2
1.4 自帶的Spark Web UI 5
1.4.1 Jobs模組 6
1.4.2 Stages模組 12
1.4.3 Storage模組 16
1.4.4 Environment模組 17
1.4.5 Executors模組 18
1.4.6 SQL模組 19
1.5 自帶的Spark歷史伺服器 21
1.5.1 Spark歷史伺服器簡介 21
1.5.2 配置、啟動和訪問Spark歷史伺服器 22
1.6 Spark事件日誌 23
1.6.1 Spark的常見事件 23
1.6.2 事件信息 24
1.6.3 Spark啟動事件分析案例 24
1.6.4 Spark事件日誌的用途 25
1.6.5 CPU密集型與記憶體密集型分析案例 26
1.7 Spark驅動程式日誌 27
1.8 Spark Executor日誌 28
1.8.1 Spark Executor日誌簡介 28
1.8.2 日誌解析 28
1.8.3 配置Executor列印日誌到Driver節點 29
1.8.4 使用Executor完成時間異常分析案例 30
1.9 Linux系統監控工具 31
1.9.1 top命令 31
1.9.2 htop命令 32
1.9.3 iostat命令 32
1.9.4 vmstat命令 34
1.9.5 sar命令 35
1.9.6 Spark進程的CPU和記憶體監控案例 35
1.10 JVM監控工具 36
1.10.1 JConsole監控工具 37
1.10.2 JVisualVM監控工具 38
1.10.3 使用JVisualVM定位記憶體泄漏案例 41
1.11 第三方工具Prometheus 42
1.11.1 Prometheus簡介 42
1.11.2 Prometheus架構的工作原理 42
1.11.3 安裝Prometheus 43
1.11.4 使用Prometheus Web UI 46
1.11.5 基於PromQL磁碟的多維度分析案例 47
1.12 第三方工具Grafana 48
1.12.1 Grafana簡介 48
1.12.2 安裝Grafana 48
1.12.3 數據源和儀錶盤 49
1.12.4 在Grafana中創建查詢和可視化 52
1.12.5 監控分析Spark指標案例 55
1.13 Spark性能測試與驗證 56
1.13.1 性能測試之基準測試 56
1.13.2 性能測試之壓力測試 57
1.13.3 性能測試之資源測試 59
1.13.4 性能測試之基準最佳化測試 61
1.13.5 獲取測試數據 62
1.13.6 使用Spark MLlib生成電商網站測試數據案例 64
1.13.7 性能測試工具SparkPerf 65
1.13.8 性能測試工具HiBench 68
1.13.9 ScalaCheck檢查屬性案例 70
1.13.10 準確性驗證之單元測試 71
1.13.11 準確性驗證之集成測試 73
1.13.12 準確性驗證之作業驗證 75
1.14 Spark執行計畫 77
1.14.1 Spark執行計畫簡介 77
1.14.2 Spark執行計畫的生成過程 78
1.14.3 執行計畫中的邏輯計畫 80
1.14.4 執行計畫中的物理計畫 84
1.14.5 Spark鎢絲計畫Tungsten 89
1.14.6 Spark階段劃分和任務劃分 90
1.14.7 Spark執行計畫的最佳化和調試 91
1.14.8 Spark執行計畫的可視化 92
1.14.9 Shuffle性能瓶頸識別案例 93
1.15 Spark任務性能瓶頸的定位 94
1.15.1 性能瓶頸的定義和識別性能瓶頸的意義 95
1.15.2 數據傾斜引發的性能問題 96
1.15.3 數據本地性問題 98
1.15.4 網路瓶頸問題 100
1.15.5 記憶體管理問題 102
1.15.6 垃圾回收問題 104
1.15.7 Spark長時任務性能瓶頸定位案例 105
第2章 Spark應用程式性能最佳化 107
2.1 程式設計最佳化 107
2.1.1 數據模型策略最佳化 107
2.1.2 快取策略最佳化 108
2.1.3 廣播變數策略最佳化 109
2.1.4 累加器策略最佳化 111
2.1.5 函式式編程策略最佳化 113
2.1.6 全局變數策略最佳化 115
2.1.7 程式設計最佳化綜合案例 116
2.2 資源最佳化 118
2.2.1 Spark資源管理的重要性 118
2.2.2 Spark記憶體管理的最佳化技巧 119
2.2.3 Spark中的CPU最佳化技巧 123
2.2.4 Spark磁碟管理的最佳化技巧 125
2.2.5 Spark Shuffle分配的最佳化技巧 125
2.2.6 Spark並行度與資源分配的平衡 127
2.2.7 Spark分區策略最佳化 129
2.2.8 Spark記憶體溢出的應對策略 130
2.2.9 Spark Shuffle分配最佳化案例 131
2.3 網路通信最佳化 133
2.3.1 網路通信架構和組件 133
2.3.2 網路通信協定和數據傳輸方式 134
2.3.3 數據壓縮策略 135
2.3.4 序列化策略 137
2.3.5 網路快取策略 139
2.3.6 I/O最佳化策略 140
2.3.7 頻寬限制和網路擁塞控制 141
2.3.8 數據本地性最佳化策略 142
2.3.9 網路安全和認證最佳化 143
2.3.10 進程本地化最佳化案例 144
2.4 數據讀寫最佳化 147
2.4.1 數據讀取的最佳化技巧 147
2.4.2 數據寫入的最佳化技巧 147
2.4.3 過濾數據的讀取最佳化 148
2.4.4 分區讀取數據的最佳化 149
2.4.5 批量寫入數據的最佳化 150
2.4.6 並行寫入數據的最佳化 152
2.4.7 列存儲數據的讀取最佳化 153
2.4.8 數據預處理最佳化技巧 154
2.4.9 數據存儲位置最佳化技巧 154
2.4.10 記憶體和磁碟數據快取最佳化技巧 155
2.4.11 數據格式最佳化技巧 156
2.4.12 轉換方式最佳化技巧 157
2.4.13 索引數據讀取最佳化技巧 159
2.4.14 數據讀寫錯誤的處理和容錯技巧 160
2.4.15 Alluxio的使用 162
2.4.16 利用壓縮數據減少傳輸量案例 166
第3章 Spark任務執行過程最佳化 169
3.1 調度最佳化 169
3.1.1 資源管理器的基本原理 169
3.1.2 理解Spark資源管理器 171
3.1.3 資源分配策略 174
3.1.4 資源調度算法 176
3.1.5 集群資源池化技術 180
3.1.6 Docker容器 182
3.1.7 基於YARN的資源管理 184
3.1.8 基於Mesos的資源管理 188
3.1.9 基於Kubernetes的資源管理 190
3.1.10 Spark資源利用率和性能最佳化案例 204
3.2 任務執行器最佳化 206
3.2.1 Spark任務執行器組件簡介 206
3.2.2 Spark任務執行器的執行緒池配置最佳化 210
3.2.3 Spark任務執行器的JVM參數配置最佳化 211
3.2.4 Spark任務執行器的堆記憶體配置最佳化 213
3.2.5 Spark任務執行器的直接記憶體配置最佳化 215
3.2.6 Spark任務執行器的記憶體分配方式最佳化 216
3.2.7 Spark任務執行器的GC策略配置最佳化 218
3.2.8 Spark任務執行器的資源隔離配置最佳化 219
3.2.9 Spark任務執行器的容錯機制最佳化 220
3.2.10 Spark任務執行緒池的並行度提升和吞吐量增強案例 221
第4章 Spark SQL性能最佳化 223
4.1 常用的查詢最佳化 223
4.1.1 謂詞下推 223
4.1.2 窄依賴 224
4.1.3 聚合查詢最佳化 224
4.1.4 Join查詢最佳化 226
4.1.5 子查詢最佳化 227
4.1.6 聯合查詢最佳化 228
4.1.7 視窗函式最佳化 229
4.1.8 排序查詢最佳化 232
4.1.9 內置函式最佳化 232
4.1.10 Union連線最佳化 233
4.1.11 表設計最佳化 233
4.1.12 使用視窗函式實現高效的分組統計案例 234
4.2 Spark 3.0的新特性 236
4.2.1 AQE的自動分區合併 236
4.2.2 AQE的自動傾斜處理 238
4.2.3 AQE的Join策略調整 239
4.2.4 DPP動態分區剪裁 240
4.2.5 Join Hints的使用技巧 241
4.2.6 使用Join Hints解決數據傾斜案例 244
4.3 Spark SQL數據傾斜最佳化 245
4.3.1 廣播變數 245
4.3.2 採樣 246
4.3.3 手動指定Shuffle分區數 248
4.3.4 隨機前綴和哈希 249
4.3.5 使用Map Join方法 251
4.3.6 預先聚合 253
4.3.7 排序 255
4.3.8 動態重分區 257
4.3.9 手動實現動態重分區案例 258
4.4 特定場景最佳化 259
4.4.1 大表連線小表 259
4.4.2 大表連線大表 262
4.4.3 視窗函式最佳化 265
4.4.4 複雜邏輯和函式調用最佳化 268
4.4.5 多表關聯查詢最佳化 270
4.4.6 寬表查詢最佳化 272
4.4.7 使用兩階段Shuffle解決傾斜大表關聯案例 272
第5章 Spark性能最佳化案例分析 281
5.1 基於Spark的短視頻推薦系統性能最佳化 281
5.1.1 短視頻推薦系統概述 281
5.1.2 將Spark作為短視頻推薦系統的計算框架 285
5.1.3 客戶端Push業務 287
5.1.4 Model_Server大寬表 288
5.1.5 推薦請求表ETL的最佳化 289
5.1.6 Model_Server大寬表的最佳化 294
5.1.7 案例總結 296
5.2 基於Spark的航空數據分析系統性能最佳化 297
5.2.1 系統概述 297
5.2.2 性能評估與瓶頸分析 299
5.2.3 數據分區與存儲最佳化 300
5.2.4 任務調度與資源管理 301
5.2.5 數據預處理與轉換最佳化 302
5.2.6 查詢最佳化與性能最佳化 304
5.2.7 並行計算與調度最佳化 305
5.2.8 監控與最佳化策略 306
第6章 不同場景的Spark性能最佳化 309
6.1 批處理模式的最佳化策略 309
6.1.1 數據傾斜最佳化之預聚合 309
6.1.2 數據傾斜最佳化之鍵值對重分區 313
6.1.3 數據傾斜最佳化之調整分區數量 314
6.1.4 數據傾斜最佳化之廣播變數 316
6.1.5 數據傾斜最佳化之動態調整分區大小 317
6.1.6 數據傾斜最佳化之使用Map Join方法 318
6.1.7 數據傾斜最佳化之隨機前綴和擴容RDD 319
6.1.8 數據傾斜最佳化之採樣傾斜key 320
6.1.9 數據傾斜最佳化之過濾特定數據 322
6.1.10 數據傾斜最佳化之組合策略 323
6.1.11 基於記憶體的Shuffle操作最佳化 324
6.1.12 基於Sort的Shuffle操作最佳化 325
6.1.13 基於壓縮和序列化的Shuffle操作最佳化 326
6.1.14 基於增量式的Shuffle操作最佳化 326
6.2 流式處理場景的最佳化策略 327
6.2.1 批處理間隔最佳化 327
6.2.2 狀態管理最佳化 328
6.2.3 視窗操作最佳化 329
6.3 機器學習場景的最佳化策略 330
6.3.1 模型訓練最佳化 330
6.3.2 特徵工程最佳化 331
第7章 Spark集成其他技術的性能最佳化 333
7.1 Spark與Hadoop整合最佳化 333
7.1.1 數據讀寫最佳化 333
7.1.2 數據存儲最佳化 334
7.2 Spark與Kafka整合最佳化 336
7.2.1 數據讀寫最佳化 336
7.2.2 數據處理最佳化 337
7.3 Spark與Elasticsearch的整合最佳化 339
7.3.1 數據寫入和索引最佳化 340
7.3.2 數據查詢和性能最佳化 341
第8章 Spark性能最佳化實踐 344
8.1 Spark應用程式開發建議 344
8.1.1 代碼規範 344
8.1.2 數據分析 346
8.1.3 數據處理 348
8.2 Spark應用程式最佳化建議 349
8.2.1 數據壓縮 349
8.2.2 合理使用快取 350
8.2.3 Shuffle操作 351
8.3 Spark集群管理的最佳化建議 352
8.3.1 資源管理 352
8.3.2 任務調度 353
8.3.3 故障處理 354
結束語 356