本書以Python作為開發(fā)Spark應用程序的編程語言,系統(tǒng)介紹了Spark編程的基礎知識。全書共8章,內(nèi)容包括大數(shù)據(jù)技術概述、Spark的設計與運行原理、Spark環(huán)境搭建和使用方法、RDD編程、Spark SQL、Spark Streaming、Structured Streaming、Spark MLlib等。
1.本書是廈門大學作者團隊長期經(jīng)驗總結的結晶。本書是在廈門大學《大數(shù)據(jù)技術原理與應用》入門級大數(shù)據(jù)教材的基礎之上編寫的。為了確保教程質量,在編著出版紙質教材之前,實驗室已經(jīng)于2016年10月通過實驗室官網(wǎng)免費發(fā)布共享了簡化版的Spark在線教程和相關教學資源,同時,該在線教程也已經(jīng)用于廈門大學計算機科學系研究生的大數(shù)據(jù)課程教學,并成為全國高校大數(shù)據(jù)課程教師培訓交流班的授課內(nèi)容。實驗室根據(jù)讀者對在線Spark教程的大量反饋意見以及教學實踐中發(fā)現(xiàn)的問題,對Spark在線教程進行了多次修正和完善,所有這些前期準備工作,都為紙質教材的編著出版打下了堅實的基礎。
披荊斬棘,在大數(shù)據(jù)叢林中開辟學習捷徑
填溝削坎,為快速學習Spark 技術鋪平道路
深入淺出,有效降低Spark 技術學習門檻
資源全面,構建全方位一站式在線服務體系
林子雨,博士(畢業(yè)于北京大學),現(xiàn)為廈門大學計算機科學系助理教授,全國高校知名大數(shù)據(jù)教師,廈門大學數(shù)據(jù)庫實驗室負責人,榮獲2013年度和2017年度廈門大學獎教金、2018年廈門大學高等教育教學成果特等獎、2018年福建省高等教育教學成果二等獎和2018年國家精品在線開放課程,中國計算機學會數(shù)據(jù)庫專委會委員,中國計算機學會信息系統(tǒng)專委會委員。曾任廈門大學信息科學與技術學院院長助理、晉江市發(fā)展和改革局副局長。主要研究方向為數(shù)據(jù)庫、數(shù)據(jù)倉庫、數(shù)據(jù)挖掘、大數(shù)據(jù),并以第一作者身份在《軟件學報》《計算機學報》和《計算機研究與發(fā)展》等國家重點期刊以及國際學術會議上發(fā)表多篇學術論文。作為項目負責人主持的科研項目包括1項國家自然科學青年基金項目(No.61303004)、1項福建省自然科學青年基金項目(No.2013J05099)和1項中央高;究蒲袠I(yè)務費項目(No.2011121049),主持的教改課題包括1項2016年福建省教改課題和1項2016年教育部產(chǎn)學協(xié)作育人項目。編著出版了國內(nèi)高校第一本系統(tǒng)介紹大數(shù)據(jù)知識的專業(yè)教材《大數(shù)據(jù)技術原理與應用》,被國內(nèi)眾多高校采用作為開課教材,并成為京東、**網(wǎng)等網(wǎng)店暢銷書籍。建設了國內(nèi)高校**大數(shù)據(jù)課程公共服務平臺,為教師教學和學生學習大數(shù)據(jù)課程提供全方位、一站式服務,成為國內(nèi)高校大數(shù)據(jù)教學****,平臺每年訪問量超過100萬次。
第1 章 大數(shù)據(jù)技術概述 1
1.1 大數(shù)據(jù)概念與關鍵技術 2
1.1.1 大數(shù)據(jù)的概念 2
1.1.2 大數(shù)據(jù)關鍵技術 2
1.2 代表性大數(shù)據(jù)技術 4
1.2.1 Hadoop 4
1.2.2 Spark 8
1.2.3 Flink 10
1.2.4 Beam 11
1.3 編程語言的選擇 12
1.4 在線資源 13
1.5 本章小結 14
1.6 習題 14
實驗1 Linux 系統(tǒng)的安裝和常用命令 15
第2 章 Spark 的設計與運行原理 17
2.1 概述 18
2.2 Spark 生態(tài)系統(tǒng) 19
2.3 Spark 運行架構 21
2.3.1 基本概念 21
2.3.2 架構設計 21
2.3.3 Spark 運行基本流程 22
2.3.4 RDD 的設計與運行原理 24
2.4 Spark 的部署方式 33
2.5 本章小結 34
2.6 習題 34
第3 章 Spark 環(huán)境搭建和使用方法 35
3.1 安裝Spark 36
3.1.1 基礎環(huán)境 36
3.1.2 下載安裝文件 36
3.1.3 配置相關文件 38
3.1.4 驗證Spark 是否安裝成功 39
3.1.5 Spark 和Hadoop 的交互 39
3.2 在pyspark 中運行代碼 40
3.2.1 pyspark 命令 40
3.2.2 啟動pyspark 41
3.3 開發(fā)Spark 獨立應用程序 42
3.3.1 編寫程序 42
3.3.2 通過spark-submit 運行程序 43
3.4 Spark 集群環(huán)境搭建 44
3.4.1 集群概況 44
3.4.2 搭建Hadoop 集群 44
3.4.3 在集群中安裝Spark 45
3.4.4 配置環(huán)境變量 45
3.4.5 Spark 的配置 46
3.4.6 啟動Spark 集群 47
3.4.7 關閉Spark 集群 47
3.5 在集群上運行Spark 應用程序 48
3.5.1 啟動Spark 集群 48
3.5.2 采用獨立集群管理器 48
3.5.3 采用Hadoop YARN 管理器 49
3.6 本章小結 51
3.7 習題 51
實驗2 Spark 和Hadoop 的安裝 51
第4 章 RDD 編程 53
4.1 RDD 編程基礎 54
4.1.1 RDD 創(chuàng)建 54
4.1.2 RDD 操作 56
4.1.3 持久化 63
4.1.4 分區(qū) 64
4.1.5 一個綜合實例 69
4.2 鍵值對RDD 71
4.2.1 鍵值對RDD 的創(chuàng)建 71
4.2.2 常用的鍵值對轉換操作 72
4.2.3 一個綜合實例 78
4.3 數(shù)據(jù)讀寫 79
4.3.1 文件數(shù)據(jù)讀寫 79
4.3.2 讀寫HBase 數(shù)據(jù) 82
4.4 綜合實例 86
4.4.1 求TOP 值 86
4.4.2 文件排序 89
4.4.3 二次排序 91
4.5 本章小結 94
4.6 習題 95
實驗3 RDD 編程初級實踐 95
第5 章 Spark SQL 98
5.1 Spark SQL 簡介 99
5.1.1 從Shark 說起 99
5.1.2 Spark SQL 架構 100
5.1.3 為什么推出Spark SQL 101
5.2 DataFrame 概述 101
5.3 DataFrame 的創(chuàng)建 102
5.4 DataFrame 的保存 103
5.5 DataFrame 的常用操作 104
5.6 從RDD 轉換得到DataFrame 105
5.6.1 利用反射機制推斷RDD 模式 106
5.6.2 使用編程方式定義RDD 模式 107
5.7 使用Spark SQL 讀寫數(shù)據(jù)庫 108
5.7.1 準備工作 109
5.7.2 讀取MySQL 數(shù)據(jù)庫中的數(shù)據(jù) 109
5.7.3 向MySQL 數(shù)據(jù)庫寫入數(shù)據(jù) 110
5.8 本章小結 111
5.9 習題 112
實驗4 Spark SQL 編程初級實踐 112
第6 章 Spark Streaming 115
6.1 流計算概述 116
6.1.1 靜態(tài)數(shù)據(jù)和流數(shù)據(jù) 116
6.1.2 批量計算和實時計算 117
6.1.3 流計算概念 117
6.1.4 流計算框架 118
6.1.5 流計算處理流程 119
6.2 Spark Streaming 121
6.2.1 Spark Streaming 設計 121
6.2.2 Spark Streaming 與Storm 的對比 122
6.2.3 從“Hadoop+Storm”架構轉向Spark 架構 122
6.3 DStream 操作概述 123
6.3.1 Spark Streaming 工作機制 123
6.3.2 編寫Spark Streaming 程序的基本步驟 124
6.3.3 創(chuàng)建StreamingContext 對象 124
6.4 基本輸入源 125
6.4.1 文件流 125
6.4.2 套接字流 127
6.4.3 RDD 隊列流 131
6.5 高級數(shù)據(jù)源 133
6.5.1 Kafka 簡介 133
6.5.2 Kafka 準備工作 133
6.5.3 Spark 準備工作 135
6.5.4 編寫Spark Streaming 程序使用Kafka 數(shù)據(jù)源 136
6.6 轉換操作 137
6.6.1 DStream 無狀態(tài)轉換操作 137
6.6.2 DStream 有狀態(tài)轉換操作 138
6.7 輸出操作 143
6.7.1 把DStream 輸出到文本文件中 143
6.7.2 把DStream 寫入到關系數(shù)據(jù)庫中 145
6.8 本章小結 147
6.9 習題 147
實驗5 Spark Streaming 編程初級實踐 147
第7 章 Structured Streaming 150
7.1 概述 151
7.1.1 基本概念 151
7.1.2 兩種處理模型 152
7.1.3 Structured Streaming 和Spark SQL、Spark Streaming 的關系 154
7.2 編寫Structured Streaming程序的基本步驟 154
7.2.1 實現(xiàn)步驟 154
7.2.2 測試運行 156
7.3 輸入源 158
7.3.1 File 源 158
7.3.2 Kafka 源 163
7.3.3 Socket 源 167
7.3.4 Rate 源 167
7.4 輸出操作 169
7.4.1 啟動流計算 169
7.4.2 輸出模式 170
7.4.3 輸出接收器 170
7.5 容錯處理 173
7.5.1 從檢查點恢復故障 173
7.5.2 故障恢復中的限制 173
7.6 遲到數(shù)據(jù)處理 174
7.6.1 事件時間 174
7.6.2 遲到數(shù)據(jù) 175
7.6.3 水印 176
7.6.4 多水印規(guī)則 177
7.6.5 處理遲到數(shù)據(jù)的實例 178
7.7 查詢的管理和監(jiān)控 181
7.7.1 管理和監(jiān)控的方法 181
7.7.2 一個監(jiān)控的實例 182
7.8 本章小結 184
7.9 習題 185
實驗6 Structured Streaming編程實踐 185
第8章 Spark MLlib 187
8.1 基于大數(shù)據(jù)的機器學習 188
8.2 機器學習庫MLlib 概述 189
8.3 基本數(shù)據(jù)類型 190
8.3.1 本地向量 190
8.3.2 標注點 191
8.3.3 本地矩陣 192
8.4 機器學習流水線 193
8.4.1 流水線的概念 193
8.4.2 流水線工作過程 193
8.5 特征提取、轉換和選擇 195
8.5.1 特征提取 195
8.5.2 特征轉換 199
8.5.3 特征選擇 204
8.5.4 局部敏感哈!205
8.6 分類算法 205
8.6.1 邏輯斯蒂回歸分類器 206
8.6.2 決策樹分類器 212
8.7 聚類算法 217
8.7.1 K-Means 聚類算法 218
8.7.2 GMM 聚類算法 220
8.8 協(xié)同過濾算法 223
8.8.1 推薦算法的原理 223
8.8.2 ALS 算法 224
8.9 模型選擇和超參數(shù)調(diào)整 228
8.9.1 模型選擇工具 229
8.9.2 用交叉驗證選擇模型 229
8.10 本章小結 232
8.11 習題 233
實驗7 Spark 機器學習庫MLlib編程實踐 233
參考文獻 235