循序漸進Spark大數據應用開發
柳偉衛
- 出版商: 清華大學
- 出版日期: 2024-11-01
- 定價: $534
- 售價: 8.5 折 $454
- 語言: 簡體中文
- ISBN: 7302675201
- ISBN-13: 9787302675204
-
相關分類:
Spark、大數據 Big-data
下單後立即進貨 (約4週~6週)
相關主題
商品描述
目錄大綱
目 錄
第 1 章 Spark概述 1
1.1 Spark簡介 1
1.1.1 誕生與初始階段 1
1.1.2 開源與社區建設 2
1.1.3 成為頂級項目 2
1.1.4 版本更新 3
1.2 Spark組成 4
1.2.1 Spark Core 5
1.2.2 集群管理器 5
1.2.3 Spark UI 5
1.2.4 Spark SQL 6
1.2.5 Spark Streaming 6
1.2.6 Structured Streaming 6
1.2.7 MLlib 6
1.2.8 GraphX 7
1.2.9 其他 7
1.3 Spark數據類型 7
1.3.1 RDD 7
1.3.2 DataFrame 8
1.3.3 Dataset 8
1.3.4 數值類型 8
1.3.5 字符串類型 8
1.3.6 日期和時間類型 9
1.3.7 復雜類型 9
1.4 Spark的使用場景 9
1.4.1 批處理 9
1.4.2 實時流處理 9
1.4.3 分佈式文件系統 10
1.4.4 機器學習 10
1.4.5 圖計算 10
1.5 Spark與Hadoop的聯系與區別 11
1.5.1 Hadoop概述 11
1.5.2 Spark的優缺點 11
1.5.3 Spark與Hadoop的關系 12
1.6 本章小結 12
第 2 章 Spark安裝及初體驗 13
2.1 下載並安裝Spark 13
2.1.1 普通安裝 13
2.1.2 通過Docker鏡像安裝 15
2.1.3 驗證安裝 17
2.2 通過Shell使用Spark 18
2.2.1 使用Scala的Shell 18
2.2.2 使用其他語言的Shell 19
2.3 實戰:通過Spark進行詞頻統計 19
2.3.1 初始化應用 19
2.3.2 創建Spark應用程序 20
2.3.3 準備數據文件 22
2.3.4 運行程序 22
2.4 日誌信息詳解 23
2.4.1 啟動信息 23
2.4.2 資源分配、Spark上下文初始化 25
2.4.3 任務進度和狀態 26
2.4.4 應用程序日誌 29
2.4.5 完成信息 29
2.5 動手練習 31
練習1:安裝和配置Spark 31
練習2:使用Spark讀取CSV文件並顯示前5行 32
練習3:使用Spark創建不同類型的數據結構 33
練習4:通過Spark進行詞頻統計 34
2.6 本章小結 36
第 3 章 RDD基礎編程 37
3.1 瞭解RDD的基本概念 37
3.1.1 RDD的定義 37
3.1.2 RDD的特性 38
3.1.3 RDD的操作 38
3.1.4 RDD的依賴關系 38
3.1.5 RDD的容錯機制 39
3.1.6 RDD的持久化 40
3.2 創建RDD 40
3.2.1 並行化集合 40
3.2.2 讀取外部數據集 40
3.3 操作RDD 41
3.4 實戰:transformation操作 42
3.4.1 map 42
3.4.2 filter 44
3.4.3 flatMap 44
3.4.4 sample 45
3.4.5 union 46
3.4.6 distinct 46
3.4.7 groupByKey 47
3.5 實戰:action操作 48
3.5.1 collect 48
3.5.2 reduce 49
3.5.3 count 49
3.5.4 first 50
3.5.5 take 50
3.5.6 foreach 51
3.5.7 saveAsTextFile 51
3.6 惰性求值 52
3.7 函數式編程 53
3.8 持久化 53
3.8.1 RDD持久化的基本概念 53
3.8.2 RDD持久化的方法 54
3.8.3 RDD持久化的存儲級別 54
3.8.4 RDD持久化的使用場景 54
3.8.5 RDD持久化的註意事項 54
3.8.6 刪除數據 55
3.9 實戰:持久化 55
3.10 共享變量 57
3.10.1 廣播變量 57
3.10.2 累加器 58
3.11 混洗 60
3.11.1 定義與原理 60
3.11.2 混洗流程 61
3.11.3 混洗優化方法 62
3.12 鍵-值對 62
3.13 動手練習 63
練習1:創建一個RDD並打印其元素(並行化集合) 63
練習2:讀取外部數據集並統計單詞數量(讀取外部數據集) 64
3.14 本章小結 65
第 4 章 Spark集群管理 66
4.1 Spark集群概述 66
4.1.1 Spark集群組件 66
4.1.2 使用Spark集群的註意事項 67
4.1.3 集群管理器類型 68
4.2 提交任務到Spark集群 68
4.2.1 捆綁應用程序的依賴關系 68
4.2.2 使用spark-submit啟動應用 69
4.2.3 主節點URL 70
4.2.4 從文件加載配置 71
4.3 啟動Spark集群 71
4.3.1 手動啟動集群 72
4.3.2 集群啟動腳本 72
4.4 Spark集群的高可用方案 73
4.4.1 使用ZooKeeper的備用模式 73
4.4.2 使用本地文件系統的單節點恢復 74
4.5 使用YARN集群 74
4.5.1 在YARN集群管理器上啟動Spark 74
4.5.2 添加其他的JAR 75
4.5.3 調試應用 75
4.5.4 使用Spark歷史記錄服務器替換Spark Web UI 76
4.6 YARN集群的常用配置 77
4.7 YARN集群資源分配和配置 80
4.8 YARN階段級調度 81
4.8.1 階段級調度概述 81
4.8.2 註意事項 82
4.9 動手練習 82
練習1:提交任務到Spark集群 82
練習2:啟動Spark集群 83
練習3:使用YARN集群 84
練習4:使用Spark進行數據清洗和轉換 84
4.10 本章小結 86
第 5 章 Spark SQL 87
5.1 Spark SQL的基本概念及工作原理 87
5.1.1 Spark SQL的基本概念 87
5.1.2 Spark SQL的工作原理 88
5.1.3 Spark RDD與Spark SQL的比較 89
5.1.4 抉擇建議 90
5.2 Dataset與DataFrame 90
5.2.1 SQL API與Dataset/DataFrame API 90
5.2.2 RDD、Dataset和DataFrame的優缺點總結 92
5.2.3 RDD、Dataset、DataFrame的相互轉換 93
5.3 實戰:DataFrame的基本操作 94
5.3.1 創建SparkSession 94
5.3.2 創建DataFrame 95
5.3.3 DataFrame的常用操作 97
5.4 實戰:Dataset的基本操作 99
5.4.1 創建SparkSession 99
5.4.2 創建Dataset 100
5.4.3 Dataset的常用操作 101
5.5 實戰:使用DataFrame創建臨時視圖 103
5.5.1 如何創建本地臨時視圖 104
5.5.2 createTempView與createOrReplaceTempView的異同 105
5.5.3 全局臨時視圖 105
5.6 實戰:RDD轉換為Dataset 106
5.6.1 使用反射推斷Schema 106
5.6.2 以編程方式構建Schema 107
5.7 Apache Parquet列存儲格式 108
5.7.1 什麽是列存儲格式 108
5.7.2 Parquet文件格式 110
5.8 實戰:Apache Parquet數據源的讀取和寫入 111
5.8.1 讀取Parquet文件 111
5.8.2 寫入Parquet文件 112
5.8.3 手動指定選項 113
5.9 實戰:使用JDBC操作數據庫 115
5.9.1 引入JDBC驅動程序 115
5.9.2 初始化表結構和數據 115
5.9.3 讀取表數據 117
5.9.4 設置查詢條件 118
5.9.5 將數據寫入表 119
5.10 實戰:讀取二進制文件 120
5.10.1 讀取二進制文件 120
5.10.2 運行應用 121
5.11 實戰:導出數據到CSV文件 122
5.11.1 創建Dataset 122
5.11.2 將Dataset導出到CSV文件 123
5.11.3 運行 124
5.12 Apache ORC文件 124
5.12.1 ORC文件概述 124
5.12.2 ORC支持的數據類型 125
5.12.3 ORC實現 126
5.12.4 矢量化讀取器 127
5.12.5 模式合並 127
5.12.6 使用Zstandard壓縮 127
5.12.7 使用Bloom過濾器 127
5.12.8 列式加密 128
5.12.9 Hive元存儲ORC表轉換 128
5.12.10 ORC的常用配置 128
5.13 實戰:Apache ORC文件操作示例 129
5.13.1 寫入ORC文件 129
5.13.2 讀取ORC文件 130
5.14 Apache Hive數據倉庫 130
5.14.1 Hive的特性 131
5.14.2 Hive數據組織 131
5.14.3 Hive的數據類型 132
5.14.4 創建、顯示、更改和刪除表 133
5.14.5 加載數據 136
5.14.6 查詢 137
5.15 實戰:Apache Hive操作示例 139
5.15.1 Spark集成Hive 139
5.15.2 創建SparkSession 140
5.15.3 建表 141
5.15.4 加載數據 141
5.15.5 查詢 141
5.15.6 運行 141
5.16 Apache Avro格式 142
5.16.1 Avro概述 142
5.16.2 Avro的架構與實現 143
5.16.3 Avro類型轉換Spark SQL類型 143
5.16.4 Spark SQL類型轉換Avro類型 144
5.17 實戰:Apache Avro操作示例 145
5.17.1 Spark集成Avro 145
5.17.2 創建SparkSession 147
5.17.3 讀取Avro文件 147
5.17.4 寫入Avro文件 147
5.18 動手練習 148
練習1:使用DataFrame創建臨時視圖 148
練習2:對Apache Parquet數據源進行數據的讀取和寫入 149
練習3:使用DataFrame操作數據庫 149
練習4:導出數據到CSV文件 150
5.19 本章小結 150
第 6 章 Spark Web UI 152
6.1 Web UI概述 152
6.1.1 Web UI的組成 152
6.1.2 Web UI的功能 153
6.1.3 Web UI的使用 153
6.1.4 Web UI的優化 153
6.2 啟動Web UI 154
6.2.1 Standalone模式 154
6.2.2 YARN模式 154
6.2.3 Kubernetes模式 154
6.2.4 其他集群管理器 155
6.3 Jobs頁面 155
6.4 Stages頁面 156
6.5 Storage頁面 157
6.6 Environment頁面 158
6.7 Executors頁面 160
6.8 SQL頁面 161
6.9 動手練習 162
練習1:啟動Web UI並訪問 162
練習2:使用Web UI瞭解集群運行狀態 163
6.10 本章小結 164
第 7 章 Spark Streaming 165
7.1 Spark Streaming概述 165
7.1.1 數據集類型 165
7.1.2 統一數據處理 166
7.1.3 Spark Streaming的基本概念 167
7.1.4 Spark Streaming的工作原理 167
7.1.5 Spark Streaming的應用場景 168
7.1.6 Spark Streaming的優勢與挑戰 168
7.1.7 使用Spark Streaming的依賴 168
7.2 DStream的transformation操作 169
7.2.1 DStream的常用操作 170
7.2.2 DStream的窗口操作 170
7.3 DStream的輸入 171
7.3.1 輸入源的使用要點 172
7.3.2 基本輸入源 172
7.3.3 高級輸入源 173
7.3.4 Receiver的可靠性 173
7.3.5 自定義Receiver 173
7.3.6 自定義可靠的Receiver 175
7.4 實戰:DStream無狀態的transformation操作 176
7.4.1 創建JavaStreamingContext對象 176
7.4.2 創建DStream 176
7.4.3 啟動計算 177
7.4.4 單詞發送服務器 177
7.4.5 運行 179
7.5 實戰:DStream有狀態的transformation操作 179
7.5.1 滑動窗口 179
7.5.2 編寫滑動窗口示例 181
7.5.3 運行 181
7.6 DStream的輸出操作 181
7.6.1 常用的輸出操作 182
7.6.2 foreachRDD設計模式 182
7.7 實戰:DStream的輸出操作 183
7.7.1 將DStream輸出到文件 184
7.7.2 運行 184
7.8 Spark Streaming使用DataFrame和SQL操作 185
7.9 Spark Streaming檢查點 186
7.9.1 Spark Streaming檢查點概念及原理 186
7.9.2 應用場景 187
7.9.3 配置方法 187
7.9.4 優化策略 188
7.9.5 總結與展望 188
7.10 Spark Streaming性能優化 188
7.10.1 數據接收並行度調優 188
7.10.2 批處理時間優化 189
7.10.3 內存管理優化 189
7.10.4 容錯性優化 189
7.10.5 其他優化策略 190
7.11 Spark Streaming容錯機制 190
7.11.1 Spark Streaming容錯機制概述 190
7.11.2 基於文件的數據源容錯機制 190
7.11.3 基於Receiver的數據源容錯機制 191
7.11.4 驅動程序節點的容錯機制 191
7.12 實戰:Spark Streaming與Kafka集成 192
7.12.1 Spark Streaming集成Kafka 192
7.12.2 自定義生產者 192
7.12.3 構造消費者 193
7.12.4 啟動Kafka服務器 195
7.12.5 運行 196
7.13 動手練習 198
練習1:DStream無狀態的transformation操作 198
練習2:DStream有狀態的transformation操作(滑動窗口) 199
練習3:編寫一個Spark Streaming應用程序 201
7.14 本章小結 203
第 8 章 Structured Streaming 204
8.1 Structured Streaming概述 204
8.1.1 基本概念 204
8.1.2 處理事件時間和延遲數據 206
8.1.3 容錯語義 207
8.1.4 Spark Streaming與Structured Streaming的比較 207
8.2 創建流式DataFrame/Dataset 208
8.2.1 從輸入源創建DataFrame/Dataset 208
8.2.2 流式DataFrame/Dataset的模式推理與分區 209
8.3 Structured Streaming操作 210
8.3.1 基本操作 210
8.3.2 窗口操作 211
8.3.3 連接操作 211
8.3.4 不支持的DataFrame/Dataset操作 213
8.4 Structured Streaming統計來自Socket數據流的詞頻 214
8.4.1 創建SparkSession 214
8.4.2 創建DataFrame 214
8.4.3 執行查詢 215
8.4.4 運行 215
8.5 實戰:Structured Streaming窗口操作 216
8.5.1 在事件時間上執行窗口操作 216
8.5.2 創建SparkSession 217
8.5.3 創建DataFrame 217
8.5.4 執行查詢 218
8.5.5 運行 219
8.6 Structured Streaming輸出接收器 220
8.6.1 文件接收器 220
8.6.2 Kafka接收器 220
8.6.3 Foreach接收器 220
8.6.4 Console接收器 220
8.6.5 內存接收器 221
8.7 消除重復數據 221
8.7.1 使用唯一身份標識符 221
8.7.2 結合使用水印 221
8.8 狀態存儲 222
8.8.1 狀態存儲與恢復 222
8.8.2 狀態分片與讀寫 223
8.8.3 版本管理 223
8.8.4 狀態存儲的實現 223
8.9 啟動流式查詢 225
8.9.1 流式查詢的參數 225
8.9.2 foreach和foreachBatch 226
8.9.3 流式表API 228
8.9.4 觸發器 228
8.9.5 管理流式查詢 230
8.10 異步進度跟蹤 231
8.10.1 異步進度跟蹤的概念與重要性 231
8.10.2 異步進度跟蹤的實現機制 232
8.10.3 使用示例 232
8.10.4 使用限制 233
8.11 連續處理 233
8.11.1 啟用連續處理 233
8.11.2 連續處理與微批處理的比較 234
8.12 實戰:Structured Streaming與Kafka集成 235
8.12.1 Structured Streaming集成Kafka 235
8.12.2 構造消費者 236
8.12.3 運行 237
8.13 動手練習 239
練習1:使用Structured Streaming統計來自Socket數據流的詞頻 239
練習2:使用Structured Streaming進行窗口操作 240
練習3:使用Structured Streaming與Kafka集成 241
8.14 本章小結 243
第 9 章 MLlib 244
9.1 MLlib概述 244
9.1.1 功能簡介 244
9.1.2 重要算法 245
9.1.3 應用狀況 245
9.2 機器學習基礎知識 246
9.2.1 機器學習的定義 246
9.2.2 機器學習的分類 246
9.2.3 機器學習的基本流程 247
9.2.4 常見的機器學習算法 247
9.3 MLlib的RDD API和DataFrame API 247
9.4 MLlib流水線 248
9.4.1 MLlib流水線的核心概念 248
9.4.2 Pipeline 248
9.5 實戰:MLlib的Estimator例子 250
9.5.1 使用MLlib依賴 250
9.5.2 創建SparkSession 250
9.5.3 創建DataFrame 250
9.5.4 使用Estimator 251
9.5.5 運行 252
9.6 實戰:MLlib的Transformer例子 253
9.6.1 創建DataFrame 253
9.6.2 使用Transformer 253
9.6.3 運行 254
9.7 實戰:MLlib的Pipeline例子 254
9.7.1 準備JavaBean 254
9.7.2 準備訓練數據 255
9.7.3 配置Pipeline 256
9.7.4 學習PipelineModel 256
9.7.5 運行 257
9.8 動手練習 257
練習1:使用Spark MLlib中的Estimator進行線性回歸模型的訓練 257
練習2:使用Spark MLlib中的Transformer進行特徵轉換 259
練習3:使用Spark MLlib中的Pipeline進行特徵轉換和模型訓練 261
9.9 本章小結 263
第 10 章 GraphX 264
10.1 GraphX概述 264
10.1.1 GraphX的核心概念 264
10.1.2 GraphX的主要功能 265
10.1.3 GraphX的實現原理 265
10.1.4 GraphX的應用場景 265
10.2 屬性圖 266
10.2.1 屬性圖的基本結構 266
10.2.2 屬性圖的存儲與處理 266
10.2.3 屬性圖的圖計算功能 267
10.2.4 屬性圖的優化 267
10.3 實戰:GraphX從邊構建圖 268
10.3.1 初始化JavaSparkContext 268
10.3.2 初始化Edge 268
10.3.3 初始化Graph 269
10.3.4 輸出Graph的內容 269
10.3.5 運行 269
10.4 GraphX分區優化 270
10.5 動手練習 271
練習:使用GraphX庫 271
10.6 本章小結 272
參考文獻 274