Spark大數據分析:源碼解析與實例詳解

Spark大數據分析:源碼解析與實例詳解

Spark大數據分析:源碼解析與實例詳解》基於Spark 2.3.x、Spark 2.4.x系列版本,採用“理論+實踐”的形式編寫。全書共有90個實例,1個完整項目。

基本介紹

  • 書名:Spark大數據分析:源碼解析與實例詳解
  • 作者:劉景澤 編著
  • ISBN:978-7-121-37051-9
  • 頁數:436頁
  • 定價:89.00元 
  • 出版社:電子工業出版社
  • 出版時間:2019年7月出版
  • 開本:16開
內容提要,目錄,作者簡介,

內容提要

《Spark大數據分析:源碼解析與實例詳解》結構清晰、實例豐富、通俗易懂、實用性強,特別適合Spark的初學者和進階讀者作為自學用書。另外,本書也適合社會培訓學校作為培訓教材,還適合大中專院校的相關專業作為教學參考書。
第1篇“準備”,包括認識大數據和Spark、安裝與配置Spark集群、第1個Spark程式;第2篇“入門”,包括讀寫分散式數據、處理分散式數據;第3篇“進階”,包括RDD的高級操作、用SQL語法分析結構化數據、實時處理流式數據;第4篇“高階”,包括實時處理流式數據、Spark的相關最佳化;第5篇“商業項目實戰”,用Spark的各種組件實現一個學生學情分析商業項目。

目錄

==第1篇 準備
=第1章 認識大數據和Spark /2
1.1 大數據的介紹 /2
1.2 Apache Spark能做什麼 /3
1.3 其他分散式數據處理框架 /4
1.4 如何使用本書 /4
∣1.4.1 需要提前具備的基礎 /4
∣1.4.2 準備相關開發環境 /4
∣1.4.3 如何學習本書 /5
=
第2章 安裝與配置Spark集群 /6
2.1 下載Spark安裝包 /6
2.2 檢查與準備集群環境 /7
2.3 了解目前集群中已經部署的框架服務 /11
2.4 部署Spark集群 /12
∣2.4.1 實例1:基於Standalone模式部署Spark集群 /12
∣2.4.2 實例2:部署Spark的歷史服務——Spark History Server /16
∣2.4.3 實例3:基於Standalone模式部署高可用的Master服務 /18
∣2.4.4 實例4:基於YARN模式部署Spark集群 /20
∣2.4.5 Standalone模式與YARN模式的特點 /22
2.5 本章小結 /23
=
第3章 第1個Spark程式 /24
3.1 運行第1個Spark程式 /24
∣3.1.1 實例5:基於Standalone模式運行第1個Spark程式 /24
∣3.1.2 實例6:基於YARN模式運行第1個Spark程式 /27
∣3.1.3 提交Spark程式時的參數規範 /30
3.2 使用spark-shell編寫並運行WordCount程式 /30
∣3.2.1 實例7:啟動spark-shell /31
∣3.2.2 實例8:在spark-shell中編寫WordCount程式 /32
3.3 使用IDEA編寫並運行WordCount程式 /34
∣3.3.1 實例9:準備開發環境,並構建代碼工程 /34
∣3.3.2 實例10:使用IDEA編寫WordCount程式 /41
∣3.3.3 實例11:在IDEA中本地運行WordCount程式 /44
∣3.3.4 實例12:在IDEA中遠程運行WordCount程式 /46
∣3.3.5 實例13:打包程式並提交至集群運行 /48
3.4 本章小結 /49
==第2篇 入門
第4章 讀寫分散式數據——基於Spark Core /52
4.1 RDD的誕生 /52
4.2 進一步理解RDD /53
∣4.2.1 數據存儲 /53
∣4.2.2 數據分析 /55
∣4.2.3 程式調度 /56
4.3 讀取數據並生成RDD /57
∣4.3.1 實例14:讀取普通文本數據 /58
∣4.3.2 實例15:讀取JSON格式的數據 /59
∣4.3.3 實例16:讀取CSV、TSV格式的數據 /61
∣4.3.4 實例17:讀取SequenceFile格式的數據 /62
∣4.3.5 實例18:讀取Object格式的數據 /64
∣4.3.6 實例19:讀取HDFS中的數據——顯式調用Hadoop API /66
∣4.3.7 實例20:讀取MySQL資料庫中的數據 /68
4.4 保存RDD中的數據到外部存儲系統 /70
∣4.4.1 實例21:保存成普通文本檔案 /70
∣4.4.2 實例22:保存成JSON檔案 /71
∣4.4.3 實例23:保存成CSV、TSV檔案 /73
∣4.4.4 實例24:保存成SequenceFile檔案 /74
∣4.4.5 實例25:保存成Object檔案 /75
∣4.4.6 實例26:保存成HDFS檔案——顯式調用Hadoop API的方式 /76
∣4.4.7 實例27:寫入MySQL資料庫 /78
4.5 本章小結 /80
=
第5章 處理分散式數據——基於Spark Core /81
5.1 RDD的轉換(transformations)操作——轉換數據形態 /81
∣5.1.1 實例28:基礎轉換操作 /81
∣5.1.2 實例29:鍵值對轉換操作 /103
5.2 RDD的行動(actions)操作——觸發執行任務計畫 /115
∣5.2.1 實例30:基礎行動操作 /116
∣5.2.2 實例31:鍵值對行動操作 /125
∣5.2.3 實例32:數值行動操作 /127
5.3 本章小結 /128
==第3篇 進階
第6章 RDD的高級操作 /130
6.1 快取RDD /130
∣6.1.1 快取RDD的基礎知識 /130
∣6.1.2 實例33:快取與釋放RDD /133
6.2 RDD的檢查點(Checkpoint)機制 /139
∣6.2.1 了解Checkpoint機制 /139
∣6.2.2 實例34:使用Checkpoint機制 /141
∣6.2.3 Checkpoint機制的工作流程 /144
6.3 RDD的依賴關係 /145
∣6.3.1 窄依賴(narrow dependencies) /145
∣6.3.2 寬依賴(wide/shuffle dependencies) /148
∣6.3.3 實例35:讓子RDD混合依賴多個父RDD /151
∣6.3.4 實例36:詞頻統計——總結運算過程中涉及的概念 /153
6.4 累加器(Accumulator) /155
∣6.4.1 認識累加器 /155
∣6.4.2 實例37:使用系統累加器1——長整數、雙精度浮點數累加器 /156
∣6.4.3 實例38:使用系統累加器2——集合累加器 /159
∣6.4.4 實例39:自定義累加器 /160
6.5 廣播(Broadcast)——將數據塊快取到所有節點 /164
∣6.5.1 認識廣播 /165
∣6.5.2 實例40:使用廣播補全數據 /165
6.6 本章小結 /168
=
第7章 用SQL語法分析結構化數據——基於Spark SQL /169
7.1 為什麼會產生Spark SQL /169
7.2 認識DataFrame與Dataset數據類型 /170
∣7.2.1 認識DataFrame /170
∣7.2.2 認識Dataset /171
7.3 實例41:通過Dataset、DataFrame分析用戶數據 /172
∣7.3.1 用spark-shell編寫程式 /172
∣7.3.2 用IDEA編寫程式 /175
7.4 不同Spark版本的操作差異 /177
∣7.4.1 認識SQLContext與HiveContext /178
∣7.4.2 認識SparkSession /178
7.5 DataFrame、Dataset的基本操作 /179
∣7.5.1 DSL與SQL的語法風格 /179
∣7.5.2 使用臨時視圖的注意事項 /181
∣7.5.3 實例42:讀取JSON、CSV格式的數據 /183
∣7.5.4 實例43:讀取Parquet格式的數據 /185
∣7.5.5 實例44:讀取代碼中動態生成的數據 /185
∣7.5.6 實例45:讀取關係型資料庫中的數據 /188
∣7.5.7 實例46:輸出Dataset、DataFrame中的數據 /189
∣7.5.8 實例47:RDD、DataFrame、Dataset之間的相互轉換 /192
7.6 用戶自定義函式 /195
∣7.6.1 實例48:實現“一進一出”的UDF /195
∣7.6.2 實例49:實現“多進一出”的UDAF /198
∣7.6.3 實例50:實現“一進多出”的UDTF /208
7.7 集成Spark SQL與Hive /211
∣7.7.1 已經部署Hive框架 /211
∣7.7.2 尚未部署Hive框架 /215
7.8 本章小結 /215
=
第8章 實時處理流式數據——基於Spark Streaming /216
8.1 為什麼會產生Spark Streaming /216
8.2 第1個Spark Streaming程式 /216
∣8.2.1 實例51:用spark-shell編寫程式 /216
∣8.2.2 實例52:用IDEA編寫程式 /221
8.3 什麼是DStream /222
∣8.3.1 認識DStream /222
∣8.3.2 認識DStreamGraph /223
8.4 讀取數據到DStream中 /227
∣8.4.1 實例53:讀取HDFS資料夾中的數據 /227
∣8.4.2 實例54:讀取RDD組成的數據佇列 /229
∣8.4.3 實例55:實時讀取Flume中的數據 /230
∣8.4.4 實例56:用高階API實時讀取Kafka中的數據 /235
∣8.4.5 實例57:用低階API實時讀取Kafka中的數據 /242
8.5 Spark Streaming中的幾個時間概念 /251
∣8.5.1 批處理間隔 /251
∣8.5.2 視窗時間寬度與滑動時間寬度 /252
∣8.5.3 實例58:使用視窗操作,每兩秒統計10秒內的平均溫度 /254
8.6 DStream的操作總結 /259
∣8.6.1 DStream的操作說明 /259
∣8.6.2 實例59:直接面向DStream中的RDD進行數據分析 /261
∣8.6.3 實例60:將DStream中的數據實時輸出至外部存儲系統 /263
∣8.6.4 實例61:對Dstream進行join操作 /267
8.7 DStream中的轉換分類 /269
∣8.7.1 無狀態轉換 /269
∣8.7.2 有狀態轉換 /270
∣8.7.3 實例62:用有狀態轉換做全局詞頻統計 /270
8.8 在Spark Streaming中的快取與Checkpoint /272
∣8.8.1 認識Spark Streaming中的Checkpoint /273
∣8.8.2 實例63:使用Spark Streaming中的Checkpoint /273
8.9 Spark Streaming中的累加器與廣播變數 /276
∣8.9.1 認識累加器與廣播變數 /276
∣8.9.2 實例64:自定義累加器,並結合無狀態轉換,實現實時的全局詞頻統計 /276
8.10 關閉Spark Streaming程式 /280
∣8.10.1 關閉程式的方案 /281
∣8.10.2 合理關閉一個運行中的Spark Streaming程式 /281
8.11 本章小結 /284
==
第4篇 高階
第9章 實時處理流式數據——基於Structured Streaming /286
9.1 為什麼會產生Structured Streaming /286
9.2 第1個Structured Streaming程式 /287
∣9.2.1 實例65:用spark-shell編寫程式 /287
∣9.2.2 實例66:用IDEA編寫程式 /289
9.3 Structured Streaming的編程模型 /291
9.4 輸入數據——生成Streaming Dataset、Streaming DataFrame /292
∣9.4.1 實例67:根據檔案生成工作流 /292
∣9.4.2 實例68:根據檔案、資料夾生成自動分區的工作流 /295
∣9.4.3 實例69:根據Kafka以Streaming模式生成工作流 /297
∣9.4.4 實例70:以Kafka為數據源,通過Batch模式生成工作流 /300
∣9.4.5 實例71:根據指定速率生成工作流 /304
9.5 基於事件時間的視窗操作 /305
∣9.5.1 事件時間視窗的工作方式 /305
∣9.5.2 實例72:事件時間視窗的生成規則 /307
∣9.5.3 實例73:基於事件時間視窗實現詞頻統計 /311
9.6 基於Watermark處理延遲數據 /314
∣9.6.1 Watermark的作用 /314
∣9.6.2 實例74:基於Update模式實現詞頻統計,並結合Watermark處理延遲數據 /314
∣9.6.3 實例75:基於Append模式實現詞頻統計,並結合Watermark處理延遲數據 /320
∣9.6.4 Watermark的底層工作原理 /322
∣9.6.5 總結:Watermark機制與輸出模式 /329
9.7 實例76:在處理流式數據時去除重複數據 /330
9.8 Structured Streaming中的join操作 /332
∣9.8.1 實例77:在Stream-Static模式下的inner join操作 /333
∣9.8.2 實例78:在Stream-Stream模式下的inner join操作 /335
∣9.8.3 總結:已經支持的join操作 /340
9.9 在Structured Streaming中實現數據分組,並手動維護分組狀態 /341
∣9.9.1 實例79:通過mapGroupsWithState實現數據分組,並手動維護分組狀態 /341
∣9.9.2 實例80:通過flatMapGroupsWithState實現數據分組,並手動維護分組狀態 /347
∣9.9.3 總結:手動維護狀態與Watermark的使用技巧 /352
9.10 輸出分析結果 /353
∣9.10.1 輸出模式(Output Mode)的使用場景 /353
∣9.10.2 實例81:基於File Sink輸出數據 /354
∣9.10.3 實例82:基於Kafka Sink,以Streaming方式輸出數據 /356
∣9.10.4 實例83:基於Kafka Sink,以Batch方式輸出數據 /358
∣9.10.5 實例84:基於Console Sink輸出數據 /360
∣9.10.6 實例85:基於Memory Sink輸出數據 /360
∣9.10.7 實例86:基於Foreach Sink輸出數據 /362
∣9.10.8 實例87:基於ForeachBatch Sink輸出數據 /367
∣9.10.9 總結:不同Sink所適用的輸出模式 /369
9.11 Trigger觸發器的分類 /370
9.12 管理與監控工作流 /370
∣9.12.1 管理工作流 /370
∣9.12.2 監控工作流 /372
9.13 Structured Streaming中的Checkpoint機制 /372
9.14 連續處理模式——Continuous Processing /373
9.15 本章小結 /374
=
第10章 Spark的相關最佳化 /375
10.1 最佳化Spark程式 /375
∣10.1.1 實例88:儘可能減少或避免出現Shuffle過程 /375
∣10.1.2 實例89:使用Kryo作為序列化方案 /377
∣10.1.3 儘可能批量運算元據 /381
∣10.1.4 合理設定分區數 /381
∣10.1.5 合理設定批處理間隔 /381
10.2 最佳化數據 /382
∣10.2.1 關於數據傾斜 /382
∣10.2.2 實例90:使用自定義Partitioner緩解數據傾斜 /383
∣10.2.3 關於數據補全 /387
10.3 調優資源 /388
10.4 本章小結 /390
=
第5篇 商業項目實戰
=
第11章 實戰:學生學習情況分析系統 /392
11.1 項目概述 /392
∣11.1.1 業務背景 /392
∣11.1.2 劃分業務模組 /392
11.2 開發環境說明 /393
11.3 項目實現 /394
∣11.3.1 構建工程 /394
∣11.3.2 模擬數據 /395
∣11.3.3 實時傳送數據到Kafka /399
∣11.3.4 實時分析平台答題數據 /402
∣11.3.5 構建推薦模型 /405
∣11.3.6 實時推薦題目 /411
∣11.3.7 離線分析學習情況 /415
11.4 本章小結 /422

作者簡介

劉景澤是全棧工程師,他長期從事大數據的研發工作,擁有豐富的大數據開發經驗。曾擔任多家知名企的主力研發,並負責大數據云服務組件開發。精通Java、Scala、Python等多種程式語言為多家企業提供技術支持,並長期面向企業一線開發人員分享實戰經驗。

相關詞條

熱門詞條

聯絡我們