Spark大數據開發與應用案例(視頻教學版)

段海濤、楊忠良、余輝

  • 出版商: 清華大學
  • 出版日期: 2025-10-01
  • 售價: $654
  • 語言: 簡體中文
  • ISBN: 7302703280
  • ISBN-13: 9787302703280
  • 相關分類: Spark
  • 下單後立即進貨 (約4週~6週)

  • Spark大數據開發與應用案例(視頻教學版)-preview-1
  • Spark大數據開發與應用案例(視頻教學版)-preview-2
  • Spark大數據開發與應用案例(視頻教學版)-preview-3
  • Spark大數據開發與應用案例(視頻教學版)-preview-4
  • Spark大數據開發與應用案例(視頻教學版)-preview-5
  • Spark大數據開發與應用案例(視頻教學版)-preview-6
  • Spark大數據開發與應用案例(視頻教學版)-preview-7
Spark大數據開發與應用案例(視頻教學版)-preview-1

商品描述

"《Spark大數據開發與應用案例:視頻教學版》在培訓機構的教學實踐中歷經8年錘煉而成,以簡明清晰且易於理解的方式,全面覆蓋Spark集群構建、Spark Core、Spark SQL、Spark實戰案例以及面試問答等內容。為增強讀者的學習體驗,《Spark大數據開發與應用案例:視頻教學版》配套豐富的電子資源,包括示例源碼、PPT教學課件、集群環境、教學視頻以及作者微信群答疑服務。 《Spark大數據開發與應用案例:視頻教學版》精心編排為15章,內容包括Spark簡介、Spark集群環境部署、Spark編程體驗、RDD深度解讀、RDD的Shuffle詳解、Spark共享變量、Spark序列化和線程安全、Spark內存管理機制、Spark SQL簡介、Spark SQL抽象編程詳解、Spark SQL自定義函數、Spark SQL源碼解讀、Spark性能調優、Spark實戰案例、Spark面試題。 《Spark大數據開發與應用案例:視頻教學版》不僅適合Spark初學者快速入門,也有助於大數據分析人員及大數據應用開發人員進一步提升技能。同時,《Spark大數據開發與應用案例:視頻教學版》也可以作為高等院校或高職高專院校Spark大數據技術課程的教材。"

作者簡介

"段海濤,畢業於南京郵電大學,高級工程師。曾就職於中國移動、中國石油、亞信科技等。從事大數據行業10余年,海易牛科技(大數據平臺開發技術服務)和北京多易教育(大數據技術培訓)創始人。為中國移動、用友軟件、四方精創及多個城市的數據局等企業和單位提供過解決方案和技術咨詢服務;為數千有誌進入大數據開發行業的大學生提供了就業培訓服務。在多個互聯網平臺公開Hadoop、Spark、Flink等大量培訓視頻,廣受歡迎和好評。楊忠良,畢業於清華大學電子工程系,博士,北京郵電大學副研究員、博士生導師。長期從事人工智能、大數據分析等領域的研究。在國內外重要期刊和會議發表學術論文80余篇,多篇文章收錄ESI高被引論文。主持或參與多項國家自然科學基金、國家重點研發計劃項目等,參與編撰教材1部。獲得 2024年中國通信學會科學技術二等獎,2021 年 ACM SIGWEB CHINA 新星獎。余輝,畢業於中科院,碩士,中級工程師,大數據平臺架構師。曾就職於京東金融、酷開網絡。從事大數據行業10余年,專註於大數據及機器學習領域。發表大數據相關論文3篇,發表軟著10多個,授權專利30多個。著有《Hadoop+Spark生態系統與實戰指南》。"

目錄大綱

目    錄

第1章  Spark簡介 1

1.1  Spark概念及其特點 1

1.2  Spark技術生態系統 2

1.3  Spark運行模式 4

1.4  Spark執行流程 8

1.5  Spark專有名詞 9

1.6  本章小結 11

第2章  Spark集群環境部署 12

2.1  VM虛擬機安裝 13

2.2  Ubuntu 22.04系統安裝 19

2.3  Ubuntu 22.04網絡配置 24

2.4  Ubuntu 22.04環境配置 28

2.5  ZooKeeper安裝 33

2.6  Hadoop安裝 35

2.6.1  下載並解壓 35

2.6.2  配置系統環境變量 35

2.6.3  配置核心文件 36

2.6.4  分發Hadoop 40

2.6.5  啟動和驗證 40

2.7  Spark安裝 47

2.7.1  下載和解壓 47

2.7.2  配置系統環境變量 47

2.7.3  配置核心文件 47

2.7.4  分發Spark 48

2.7.5  Spark啟動及UI界面查看 48

2.7.6  spark-shell啟動驗證 49

2.8  集群和代碼下載 50

2.9  本章小結 52

第3章  Spark編程體驗 54

3.1  Scala基礎編程 54

3.1.1  基本語法 55

3.1.2  函數和方法 57

3.1.3  控制語句 59

3.1.4  函數式編程 62

3.1.5  類和對象 67

3.1.6  Scala異常處理 70

3.1.7  Trait(特征) 72

3.1.8  Scala文件I/O 73

3.1.9  Scala練習題 74

3.2  Spark創建項目 80

3.3  Spark程序編寫與運行方法 90

3.4  本章小結 92

第4章  RDD深度解讀 93

4.1  RDD的概念及特點 93

4.1.1  RDD的特點 94

4.1.2  RDD的算子分類 95

4.1.3  RDD創建方法 95

4.2  RDD的血緣和依賴 97

4.2.1  血緣與依賴的概念 98

4.2.2  Dependency依賴關系 98

4.3  RDD的Transformation算子 103

4.4  RDD的Action算子 122

4.5  RDD的特殊算子 129

4.5.1  cache和persist 129

4.5.2  checkpoint 131

4.6  RDD轉換算子的惰性 133

4.6.1  Scala疊代器Iterator接口 133

4.6.2  Scala疊代器Lazy特性及原理 134

4.7  模擬Spark自定義RDD 135

4.8  Spark任務執行原理圖解分析 138

4.8.1  WordCount程序元素分解 138

4.8.2  WordCount程序圖解 139

4.8.3  Stage和Task的類型 142

4.9  案例:多種算子實現WordCount 143

4.9.1  map + reduceByKey 144

4.9.2  countByValue 145

4.9.3  aggregateByKey或foldByKey 146

4.9.4  groupByKey+map 147

4.9.5  Scala原生實現wordCount 148

4.9.6  combineByKey 149

4.10  本章小結 150

第5章  RDD的Shuffle詳解 151

5.1  Shuffle的概念及歷史 151

5.1.1  Shuffle的概念 151

5.1.2  Shuffle演進的歷史 152

5.2  Shuffle的驗證及復用性 153

5.2.1  案例:reduceByKey一定會Shuffle嗎 153

5.2.2  案例:join操作一定會觸發Shuffle嗎 155

5.2.3  Shuffle數據的復用實驗 156

5.3  HashShuffleManager 160

5.3.1  HashShuffleManager優化前 160

5.3.2  HashShuffleManager優化後 161

5.4  SortShuffleManager 162

5.4.1  普通運行機制 163

5.4.2  Bypass運行機制 164

5.5  本章小結 164

第6章  Spark共享變量 166

6.1  廣播變量 166

6.1.1  廣播變量的使用場景 166

6.1.2  廣播變量的實現原理 168

6.1.3  案例:兩個集合進行結合 168

6.2  累加器 170

6.2.1  累加器使用場景 170

6.2.2  累加器實現原理 171

6.2.3  案例:自定義累加器 173

6.2.4  案例:不使用累加器的方案 174

6.2.5  案例:使用累加器的方法 175

6.3  本章小結 176

第7章  Spark序列化和線程安全 177

7.1  Spark序列化 177

7.1.1  序列化問題的場景 177

7.1.2  數據Bean未實現序列化接口 178

7.1.3  函數閉包及其示例 179

7.2  Task線程安全 191

7.2.1  線程不安全及其解決方案 191

7.2.2  避免線程不安全的示例 192

7.3  本章小結 195

第8章  Spark內存管理機制 196

8.1  內存管理概述 196

8.2  堆內內存和堆外內存的區別 197

8.3  堆內內存 198

8.4  堆外內存 201

8.5  本章小結 204

第9章  Spark SQL簡介 205

9.1  Spark SQL的定義和特性 205

9.2  Spark SQL編程抽象 206

9.3  Spark SQL快速體驗 207

9.3.1  程序使用示例 208

9.3.2  命令行使用示例 209

9.3.3  新的編程入口SparkSession 211

9.4  本章小結 212

第10章  Spark SQL抽象編程詳解 213

10.1  DataFrame創建 213

10.1.1  使用RDD創建DataFrame 214

10.1.2  從結構化文件創建DataFrame 220

10.1.3  外部存儲服務創建DataFrame 224

10.2  DataFrame運算 230

10.2.1  SQL風格操作 230

10.2.2  DSL風格API(TableApi)語法 230

10.3  DataFrame輸出 236

10.3.1  輸出控制臺 236

10.3.2  輸出文件 236

10.3.3  輸出到RDBMS 237

10.3.4  輸出到Hive 237

10.3.5  DataFrame輸出時的分區操作 238

10.4  RDD代碼和SQL代碼混合編程 240

10.4.1  Dataset和DataFrame的區別及取數 241

10.4.2  由RDD創建DataFrame 246

10.4.3  由RDD創建Dataset 256

10.5  RDD、Dataset與DataFrame的互相轉換 261

10.6  本章小結 262

第11章  Spark SQL自定義函數 263

11.1  用戶自定義函數UDF 263

11.1.1  UDF函數的概念及其特點 263

11.1.2  UDF案例1:字符串處理 264

11.1.3  UDF案例2:GEOHASH算法 265

11.1.4  UDF案例3:余弦相似度算法 269

11.1.5  UDF註意事項 271

11.2  用戶自定義聚合函數UDAF 272

11.2.1  UDAF的編程模板 272

11.2.2  UDAF原理講解 273

11.2.3  弱類型用戶自定義聚合函數 274

11.2.4  強類型用戶自定義聚合函數 276

11.2.5  UDAF註意事項 279

11.3  本章小結 279

第12章  Spark SQL源碼解讀 280

12.1  Spark SQL的執行過程 280

12.2  元數據管理器SessionCatalog 281

12.3  SQL解析成邏輯執行計劃 281

12.4  Analyzer綁定邏輯計劃 284

12.5  Optimizer優化邏輯計劃 286

12.5.1  謂詞下推 290

12.5.2  列裁剪 290

12.5.3  常量替換 291

12.5.4  常量累加 292

12.6  使用SparkPlanner生成物理計劃 293

12.7  從物理執行計劃獲取inputRdd執行 296

12.8  本章小結 296

第13章  Spark性能調優 297

13.1  Spark常規性能調優 297

13.1.1  常規性能調優一:最優資源配置 297

13.1.2  常規性能調優二:RDD優化 298

13.1.3  常規性能調優三:並行度調節 299

13.1.4  常規性能調優四:廣播大變量 299

13.1.5  常規性能調優五:Kryo序列化 300

13.1.6  常規性能調優六:調節本地化等待時長 300

13.1.7  常規性能調優七:ShuGle調優 301

13.1.8  常規性能調優八:JVM調優 302

13.2  Spark開發原則優化 304

13.2.1  開發原則一:避免創建重復的RDD 304

13.2.2  開發原則二:避免創建重復的DataFrame 305

13.2.3  開發原則三:盡可能復用同一個RDD 305

13.2.4  開發原則四:避免重復性的SQL查詢,對DataFrame復用 306

13.2.5  開發原則五:註意數據類型的使用 307

13.2.6  開發原則六:寫出高質量的SQL 308

13.3  Spark調優方法 310

13.3.1  優化數據結構 310

13.3.2  使用緩存(Cache) 310

13.3.3  對配置屬性進行調優 312

13.3.4  合理使用廣播 314

13.3.5  盡量避免使用Shuffle算子 315

13.3.6  使用map-side預聚合的Shuffle操作 316

13.3.7  使用高性能算子 317

13.3.8  盡量在一次調用中處理一個分區的數據 318

13.3.9  對數據進行序列化 318

13.4  Spark數據傾斜調優 319

13.4.1  調整分區數目 319

13.4.2  去除多余的數據 320

13.4.3  使用廣播將Reduce Join轉換為Map Join 320

13.4.4  將key進行拆分,大數據轉換為小數據 321

13.4.5  數據傾斜定位和解決 322

13.5  本章小結 327

第14章  Spark實戰案例 328

14.1  Spark Core電影數據分析 328

14.1.1  表格及數據樣例 329

14.1.2  連續登錄超過3天的用戶DSL風格 329

14.1.3  連續登錄超過3天的用戶SQL風格 330

14.1.4  電影統計DSL風格 332

14.1.5  電影統計SQL風格 333

14.1.6  電影統計運行結果 336

14.2  Spark Core日誌數據分析 337

14.2.1  前期準備 338

14.2.2  統計PV和可視化 339

14.2.3  統計UV和可視化 342

14.2.4  統計TopN和可視化 346

14.3  Spark SQL電商數據分析 350

14.3.1  數據和表格說明 350

14.3.2  加載數據 351

14.3.3  計算每年的銷售單數和銷售總額 354

14.3.4  查詢每年最大金額的訂單及其金額 355

14.3.5  計算每年最暢銷的貨品 356

14.4  Spark SQL金融數據分析 358

14.4.1  數據準備 359

14.4.2  最大值和最小值 360

14.4.3  平均值 361

14.4.4  樣本標準差和總體標準差 361

14.4.5  中位數 362

14.4.6  四分位數 364

14.5  本章小結 365

第15章  Spark面試題 366

15.1  Spark核心概念面試題 366

15.1.1  簡述Spark是什麼 366

15.1.2  簡述Spark 3.0的特性 367

15.1.3  簡述Spark生態系統有哪些組件 367

15.1.4  簡述Spark的運行流程 368

15.1.5  簡述Spark的主要功能與特性 368

15.1.6  簡述Spark中RDD的Partitioner是如何決定的 369

15.1.7  簡述SparkContext與SparkSession之間的區別是什麼 369

15.1.8  簡述Spark的幾種運行模式 370

15.1.9  簡述DAG為什麼適合Spark 371

15.1.10  簡述DAG如何劃分Stage 371

15.2  Spark架構原理面試題 372

15.2.1  簡述Spark SQL的執行原理 372

15.2.2  簡述Spark SQL執行的流程 372

15.2.3  簡述Spark相較於MapReduce的優勢 373

15.2.4  簡述RDD的寬依賴和窄依賴產生的原理 373

15.2.5  簡述Stage的內部邏輯 374

15.2.6  簡述為什麼要根據寬依賴劃分Stage 374

15.2.7  簡述Spark on YARN運行過程 374

15.2.8  簡述YARN Client與YARN Cluster的區別 375

15.2.9  簡述Spark的YARN Cluster涉及的參數有哪些 376

15.2.10  簡述Spark廣播變量的實現和原理 376

15.3  Spark編程實踐面試題 377

15.3.1  簡述RDD是什麼 377

15.3.2  簡述對RDD機制的理解 377

15.3.3  簡述RDD的寬依賴和窄依賴 378

15.3.4  簡述RDD持久化原理是什麼 378

15.3.5  簡述RDD的容錯機制 378

15.3.6  簡述RDD的緩存級別 378

15.3.7  簡述DAG中為什麼要劃分Stage 380

15.3.8  簡述Spark SQL的數據傾斜解決方案 380

15.3.9  簡述Spark SQL如何將數據寫入Hive表 381

15.3.10  簡述Spark SQL如何使用UDF 381

15.4  Spark性能調優面試題 382

15.4.1  簡述Spark Checkpoint 382

15.4.2  簡述Spark中Checkpoint和持久化機制的區別 383

15.4.3  簡述Spark中的OOM問題 384

15.4.4  簡述Spark程序執行時,如何修改默認Task執行個數 384

15.4.5  簡述Spark Join操作的優化經驗 385

15.4.6  簡述Map Join的實現原理 386

15.4.7  簡述Spark Shuffle在什麼情況下會產生 387

15.4.8  簡述Spark Shuffle會在哪些算子中出現 387

15.4.9  簡述Spark中的Transform和Action 387

15.4.10  Spark的Job、Stage、Task如何劃分 389

15.5  Spark實戰應用面試題 389

15.5.1  簡述Map和flatMap的區別 389

15.5.2  簡述Map和mapPartition的區別 390

15.5.3  簡述reduceByKey和groupByKey的區別 391

15.5.4  簡述DataFrame的Cache和Persist的區別 391

15.5.5  簡述reduceByKey和reduce的區別 392

15.5.6  簡述Spark運行時並行度的設置 393

15.5.7  簡述Spark解決了Hadoop的哪些問題 394

15.5.8  簡述RDD、DataFrame、Dataset和DataStream的區別 395

15.5.9  簡述Spark和MapReduce Shuffle的區別 395

15.5.10  簡述RDD中reduceBykey與groupByKey哪個性能好 396

15.6  本章小結 396