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