內容簡介
本書全面介紹了Hadoop大數據分析的基礎知識、14個核心組件模組及4個項目實戰案例。為了幫助讀者高效、直觀地學習,作者特意為本書錄製了20小時同步配套教學視頻。
本書共19章,分為3篇。第1篇Hadoop基礎知識,涵蓋大數據概述、Hadoop的安裝與配置、Hadoop分散式檔案系統及基於Hadoop 3的HDFS高可用等相關內容;第2篇Hadoop核心技術,涵蓋的內容有Hadoop的分散式協調服務——ZooKeeper;分散式離線計算框架——MapReduce;Hadoop的集群資源管理系統——YARN;Hadoop的數據倉庫框架——Hive;大數據快速讀寫——HBase;海量日誌採集工具——Flume;Hadoop和關係型資料庫間的數據傳輸工具——Sqoop;分散式訊息佇列——Kafka;開源記憶體資料庫——Redis;Ambari和CDH;快速且通用的集群計算系統——Spark。第3篇Hadoop項目案例實戰,主要介紹了基於電商產品的大數據業務分析系統、用戶畫像分析、基於個性化的視頻推薦系統及電信離網用戶挽留4個項目實戰案例,以提高讀者的大數據項目開發水平。
本書內容全面,實用性強,適合作為Hadoop大數據分析與挖掘的入門讀物,也可作為Java程式設計師的進階讀物。另外,本書還特別適合想要提高大數據項目開發水平的人員閱讀。對於專業的培訓機構和相關院校而言,本書也是一本不可多得的教學用書。
圖書目錄
第1篇 Hadoop基礎知識
第1章 初識Hadoop.. 2
1.1 大數據初探... 2
1.1.1 大數據技術... 2
1.1.2 大數據技術框架... 3
1.1.3 大數據的特點... 3
1.1.4 大數據在各個行業中的套用... 4
1.1.5 大數據計算模式... 4
1.1.6 大數據與雲計算、物聯網的關係... 4
1.2 Hadoop簡介... 5
1.2.1 Hadoop套用現狀... 6
1.2.2 Hadoop簡介與意義... 6
1.3 小結... 6
第2章 Hadoop的安裝與配置.... 7
2.1 虛擬機的創建... 7
2.2 安裝Linux系統... 10
2.3 配置網路信息... 11
2.4 克隆伺服器... 12
2.5 SSH免密碼登錄... 13
2.6 安裝和配置JDK.. 15
2.6.1 上傳安裝包... 15
2.6.2 安裝JDK.. 16
2.6.3 配置環境變數... 16
2.7 Hadoop環境變數配置... 16
2.7.1 解壓縮Hadoop壓縮檔... 17
2.7.2 配置Hadoop的bin和sbin資料夾到環境變數中... 17
2.7.3 修改/etc/hadoop/hadoop-env.sh. 17
2.8 Hadoop分散式安裝... 17
2.8.1 偽分散式安裝... 17
2.8.2 完全分散式安裝... 19
2.9 小結... 21
第3章 Hadoop分散式檔案系統.... 22
3.1 DFS介紹... 22
3.1.1 什麼是DFS. 22
3.1.2 DFS的結構... 22
3.2 HDFS介紹... 23
3.2.1 HDFS的概念及體系結構... 23
3.2.2 HDFS的設計... 23
3.2.3 HDFS的優點和缺點... 24
3.2.4 HDFS的執行原理... 24
3.2.5 HDFS的核心概念... 25
3.2.6 HDFS讀檔案流程... 27
3.2.7 HDFS寫檔案流程... 28
3.2.8 Block的副本放置策略... 29
3.3 Hadoop中HDFS的常用命令... 30
3.3.1 對檔案的操作... 30
3.3.2 管理與更新... 31
3.4 HDFS的套用... 31
3.4.1 基於Shell的操作... 31
3.4.2 基於Java API的操作... 33
3.4.3 創建資料夾... 34
3.4.4 遞歸顯示檔案... 34
3.4.5 檔案上傳... 35
3.4.6 檔案下載... 35
3.5 小結... 36
第4章 基於Hadoop 3的HDFS高可用.... 37
4.1 Hadoop 3.x的發展... 37
4.1.1 Hadoop 3新特性... 37
4.1.2 Hadoop 3 HDFS集群架構... 38
4.2 Hadoop 3 HDFS完全分散式搭建... 39
4.2.1 安裝JDK.. 40
4.2.2 配置JDK環境變數... 40
4.2.3 配置免密碼登錄... 40
4.2.4 配置IP和主機名字映射關係... 41
4.2.5 SSH免密碼登錄設定... 41
4.2.6 配置Hadoop 3.1.0. 42
4.3 什麼是HDFS高可用... 47
4.3.1 HDFS高可用實現原理... 47
4.3.2 HDFS高可用實現... 48
4.4 搭建HDFS高可用... 50
4.4.1 配置ZooKeeper 50
4.4.2 配置Hadoop配置檔案... 52
4.4.3 將配置檔案複製到其他節點上... 54
4.4.4 啟動JN節點... 54
4.4.5 格式化... 55
4.4.6 複製元數據到node2節點上... 55
4.4.7 格式化ZKFC.. 55
4.4.8 啟動集群... 56
4.4.9 通過瀏覽器查看集群狀態... 56
4.4.10 高可用測試... 57
4.5 小結... 58
第2篇 Hadoop核心技術
第5章 Hadoop的分散式協調服務——ZooKeeper. 60
5.1 ZooKeeper的核心概念... 60
5.1.1 Session會話機制... 60
5.1.2 數據節點、版本與Watcher的關聯... 61
5.1.3 ACL策略... 61
5.2 ZooKeeper的安裝與運行... 61
5.3 ZooKeeper伺服器端的常用命令... 63
5.4 客戶端連線ZooKeeper的相關操作... 64
5.4.1 查看ZooKeeper常用命令... 64
5.4.2 connect命令與ls命令... 65
5.4.3 create命令——創建節點... 65
5.4.4 get命令——獲取數據與信息... 66
5.4.5 set命令——修改節點內容... 66
5.4.6 delete命令——刪除節點... 67
5.5 使用Java API訪問ZooKeeper 67
5.5.1 環境準備與創建會話實例... 68
5.5.2 節點創建實例... 69
5.5.3 JavaAPI訪問ZooKeeper實例... 70
5.6 小結... 73
第6章 分散式離線計算框架——MapReduce.. 74
6.1 MapReduce概述... 74
6.1.1 MapReduce的特點... 74
6.1.2 MapReduce的套用場景... 75
6.2 MapReduce執行過程... 76
6.2.1 單詞統計實例... 76
6.2.2 MapReduce執行過程... 77
6.2.3 MapReduce的檔案切片Split 77
6.2.4 Map過程和Reduce過程... 78
6.2.5 Shuffle過程... 78
6.3 MapReduce實例... 79
6.3.1 WordCount本地測試實例... 79
6.3.2 ETL本地測試實例... 84
6.4 溫度排序實例... 86
6.4.1 時間和溫度的封裝類MyKey.Java. 87
6.4.2 Map任務MyMapper.java. 88
6.4.3 數據分組類MyGroup.Java. 89
6.4.4 溫度排序類MySort.java. 89
6.4.5 數據分區MyPartitioner.java. 90
6.4.6 Reducer任務MyReducer.java. 90
6.4.7 主函式RunJob.java. 91
6.5 小結... 94
第7章 Hadoop的集群資源管理系統——YARN.. 95
7.1 為什麼要使用YARN.. 95
7.2 YARN的基本架構... 96
7.2.1 ResourceManager進程... 96
7.2.2 ApplicationMaster和NodeManager 97
7.3 YARN工作流程... 97
7.4 YARN搭建... 98
7.5 小結... 100
第8章 Hadoop的數據倉庫框架——Hive.. 101
8.1 Hive的理論基礎... 101
8.1.1 什麼是Hive. 101
8.1.2 Hive和資料庫的異同... 102
8.1.3 Hive設計的目的與套用... 104
8.1.4 Hive的運行架構... 104
8.1.5 Hive的執行流程... 105
8.1.6 Hive服務... 106
8.1.7 元數據存儲Metastore. 106
8.1.8 Embedded模式... 107
8.1.9 Local模式... 108
8.1.10 Remote模式... 109
8.2 Hive的配置與安裝... 109
8.2.1 安裝MySQL. 110
8.2.2 配置Hive. 112
8.3 Hive表的操作... 113
8.3.1 創建Hive表... 114
8.3.2 導入數據... 114
8.4 表的分區與分桶... 115
8.4.1 表的分區... 115
8.4.2 表的分桶... 117
8.5 內部表與外部表... 118
8.5.1 內部表... 119
8.5.2 外部表... 119
8.6 內置函式與自定義函式... 121
8.6.1 內置函式實例... 121
8.6.2 自定義UDAF函式實例... 123
8.7 通過Java訪問Hive. 124
8.8 Hive最佳化... 125
8.8.1 MapReduce最佳化... 126
8.8.2 配置最佳化... 126
8.9 小結... 127
第9章 大數據快速讀寫——HBase.. 128
9.1 關於NoSQL. 128
9.1.1 什麼是NoSQL. 128
9.1.2 NoSQL資料庫的分類... 129
9.1.3 NoSQL資料庫的套用... 129
9.1.4 關係型資料庫與非關係型資料庫的區別... 130
9.2 HBase基礎... 130
9.2.1 HBase簡介... 130
9.2.2 HBase數據模型... 131
9.2.3 HBase體系架構及組件... 132
9.2.4 HBase執行原理... 134
9.3 HBase安裝... 135
9.4 HBase的Shell操作... 138
9.5 Java API訪問HBase實例... 139
9.5.1 創建表... 139
9.5.2 插入數據... 140
9.5.3 查詢數據... 141
9.6 小結... 142
第10章 海量日誌採集工具——Flume.. 143
10.1 什麼是Flume. 143
10.2 Flume的特點... 143
10.3 Flume架構... 144
10.4 Flume的主要組件... 144
10.4.1 Event、Client與Agent——數據傳輸... 145
10.4.2 Source—Event接收... 145
10.4.3 Channel—Event傳輸... 146
10.4.4 Sink—Event傳送... 147
10.4.5 其他組件... 148
10.5 Flume安裝... 148
10.6 Flume套用典型實例... 149
10.6.1 本地數據讀取(conf1)... 149
10.6.2 收集至HDFS. 150
10.6.3 基於日期分區的數據收集... 152
10.7 通過exec命令實現數據收集... 153
10.7.1 安裝工具... 153
10.7.2 編輯配置檔案conf4. 155
10.7.3 運行Flume. 156
10.7.4 查看生成的檔案... 156
10.7.5 查看HDFS中的數據... 157
10.8 小結... 158
第11章 Hadoop和關係型資料庫間的數據傳輸工具——Sqoop.. 159
11.1 什麼是Sqoop. 159
11.2 Sqoop工作機制... 159
11.3 Sqoop的安裝與配置... 161
11.3.1 下載Sqoop. 161
11.3.2 Sqoop配置... 162
11.4 Sqoop數據導入實例... 163
11.4.1 向HDFS中導入數據... 165
11.4.2 將數據導入Hive. 167
11.4.3 向HDFS中導入查詢結果... 170
11.5 Sqoop數據導出實例... 172
11.6 小結... 173
第12章 分散式訊息佇列——Kafka. 174
12.1 什麼是Kafka. 174
12.2 Kafka的架構和主要組件... 174
12.2.1 訊息記錄的類別名——Topic. 175
12.2.2 Producer與Consumer——數據的生產和消費... 176
12.2.3 其他組件——Broker、Partition、Offset、Segment 177
12.3 Kafka的下載與集群安裝... 177
12.3.1 安裝包的下載與解壓... 177
12.3.2 Kafka的安裝配置... 178
12.4 Kafka套用實例... 181
12.4.1 Producer實例... 181
12.4.2 Consumer實例... 182
12.5 小結... 184
第13章 開源的記憶體資料庫——Redis. 185
13.1 Redis簡介... 185
13.1.1 什麼是Redis. 185
13.1.2 Redis的特點... 186
13.2 Redis安裝與配置... 186
13.3 客戶端登錄... 187
13.3.1 密碼為空登錄... 187
13.3.2 設定密碼登錄... 188
13.4 Redis的數據類型... 188
13.4.1 String類型... 188
13.4.2 List類型... 190
13.4.3 Hash類型... 191
13.4.4 Set類型... 194
13.5 小結... 197
第14章 Ambari和CDH.. 198
14.1 Ambari的安裝與集群管理... 198
14.1.1 認識HDP與Ambari 198
14.1.2 Ambari的搭建... 199
14.1.3 配置網卡與修改本機名... 199
14.1.4 定義DNS伺服器與修改hosts主機映射關係... 200
14.1.5 關閉防火牆並安裝JDK.. 200
14.1.6 升級OpenSSL安全套接層協定版本... 201
14.1.7 關閉SELinux的強制訪問控制... 201
14.1.8 SSH免密碼登錄... 202
14.1.9 同步NTP. 202
14.1.10 關閉Linux的THP服務... 204
14.1.11 配置UMASK與HTTP服務... 204
14.1.12 安裝本地源製作相關工具與Createrepo. 205
14.1.13 禁止離線更新與製作本地源... 205
14.1.14 安裝Ambari-server與MySQL. 208
14.1.15 安裝Ambari 210
14.1.16 安裝Agent與Ambari登錄安裝... 211
14.1.17 安裝部署問題解決方案... 214
14.2 CDH的安裝與集群管理... 216
14.2.1 什麼是CDH和ClouderaManager介紹... 216
14.2.2 Cloudera Manager與Ambari對比的優勢... 216
14.2.3 CDH安裝和網卡配置... 217
14.2.4 修改本機名與定義DNS伺服器... 217
14.2.5 修改hosts主機映射關係... 218
14.2.6 關閉防火牆... 218
14.2.7 安裝JDK.. 219
14.2.8 升級OpenSSL安全套接層協定版本... 219
14.2.9 禁用SELinux的強制訪問功能... 220
14.2.10 SSH 免密碼登錄... 220
14.2.11 同步NTP安裝... 220
14.2.12 安裝MySQL. 222
14.2.13 安裝Cloudera Manager 222
14.2.14 添加MySQL驅動包和修改Agent配置... 223
14.2.15 初始化CM5資料庫和創建cloudera-scm用戶... 223
14.2.16 準備Parcels. 223
14.2.17 CDH的安裝配置... 224
14.3 小結... 227
第15章 快速且通用的集群計算系統——Spark. 228
15.1 Spark基礎知識... 228
15.1.1 Spark的特點... 228
15.1.2 Spark和Hadoop的比較... 229
15.2 彈性分散式數據集RDD.. 230
15.2.1 RDD的概念... 230
15.2.2 RDD的創建方式... 230
15.2.3 RDD的操作... 230
15.2.4 RDD的執行過程... 231
15.3 Spark作業運行機制... 232
15.4 運行在YARN上的Spark. 233
15.4.1 在YARN上運行Spark. 233
15.4.2 Spark在YARN上的兩種部署模式... 233
15.5 Spark集群安裝... 234
15.5.1 Spark安裝包的下載... 234
15.5.2 Spark安裝環境... 236
15.5.3 Scala安裝和配置... 236
15.5.4 Spark分散式集群配置... 238
15.6 Spark實例詳解... 241
15.6.1 網站用戶瀏覽次數最多的URL統計... 241
15.6.2 用戶地域定位實例... 243
15.7 小結... 246
第3篇 Hadoop項目案例實戰
第16章 基於電商產品的大數據業務分析系統實戰.... 248
16.1 項目背景、實現目標和項目需求... 248
16.2 功能與流程... 249
16.2.1 用戶信息... 250
16.2.2 商品信息... 251
16.2.3 購買記錄... 251
16.3 數據收集... 252
16.3.1 Flume的配置檔案... 252
16.3.2 啟動Flume. 253
16.3.3 查看採集後的檔案... 253
16.3.4 通過後台命令查看檔案... 254
16.3.5 查看檔案內容... 255
16.3.6 上傳user.list檔案... 256
16.3.7 上傳brand.list目錄... 256
16.4 數據預處理... 257
16.5 數據分析——創建外部表... 261
16.6 建立模型... 264
16.6.1 各年齡段用戶消費總額... 264
16.6.2 查詢各品牌銷售總額... 265
16.6.3 查詢各省份消費總額... 266
16.6.4 使用Sqoop將數據導入MySQL資料庫... 266
16.7 數據可視化... 268
16.8 小結... 272
第17章 用戶畫像分析實戰.... 273
17.1 項目背景... 273
17.2 項目目標與項目開發過程... 274
17.2.1 數據採集... 274
17.2.2 數據預處理... 275
17.2.3 模型構建... 275
17.2.4 數據分析... 276
17.3 核心代碼解讀... 277
17.3.1 項目流程介紹... 277
17.3.2 核心類的解讀... 278
17.3.3 core-site.xml配置檔案... 279
17.3.4 hdfs-site.xml配置檔案... 279
17.3.5 UserProfile.properties配置檔案... 280
17.3.6 LoadConfig.java:讀取配置信息... 280
17.3.7 ReadFile.java:讀取檔案... 281
17.3.8 ReadFromHdfs.java:提取信息... 281
17.3.9 UserProfile.java:創建用戶畫像... 282
17.3.10 TextArrayWritable.java:字元串處理工具類... 285
17.3.11 MapReduce任務1:UserProfileMapReduce.java. 285
17.3.12 MapReduce任務2:UserProfileMapReduce2.java. 289
17.3.13 UserProfilePutInHbaseMap.java:提取用戶畫像... 291
17.3.14 UserProfilePutInHbaseReduce:存儲用戶畫像... 292
17.4 項目部署... 293
17.5 小結... 294
第18章 基於個性化的視頻推薦系統實戰.... 295
18.1 項目背景... 295
18.2 項目目標與推薦系統簡介... 295
18.2.1 推薦系統的分類... 295
18.2.2 推薦模型的構建流程... 296
18.2.3 推薦系統核心算法... 297
18.2.4 如何基於Mahout框架完成商品推薦... 300
18.2.5 基於Mahout框架的商品推薦實例... 300
18.3 推薦系統項目架構... 302
18.4 推薦系統模型構建... 303
18.5 核心代碼... 304
18.5.1 公共部分... 305
18.5.2 離線部分... 307
18.5.3 線上部分... 311
18.6 小結... 314
第19章 電信離網用戶挽留實戰.... 315
19.1 商業理解... 315
19.2 數據理解... 316
19.2.1 收集數據... 316
19.2.2 了解數據... 317
19.2.3 保證數據質量... 318
19.3 數據整理... 318
19.3.1 數據整合... 318
19.3.2 數據過濾... 319
19.4 數據清洗... 319
19.4.1 噪聲識別... 320
19.4.2 離群值和極端值的定義... 321
19.4.3 離群值處理方法... 321
19.4.4 數據空值處理示例... 323
19.5 數據轉換... 324
19.5.1 變數轉換... 324
19.5.2 壓縮分類水平數... 324
19.5.3 連續數據離散化... 325
19.5.4 變換啞變數... 326
19.5.5 數據標準化... 326
19.5.6 數據壓縮... 326
19.6 建模... 327
19.6.1 決策樹算法概述... 327
19.6.2 決策樹的訓練步驟... 327
19.6.3 訓練決策樹... 328
19.6.4 C4.5算法... 329
19.6.5 決策樹剪枝... 332
19.7 評估... 335
19.7.1 混淆矩陣... 335
19.7.2 ROC曲線... 336
19.8 部署... 338
19.9 用戶離網案例代碼詳解... 339
19.9.1 數據準備... 339
19.9.2 相關性分析... 341
19.9.3 最終建模... 342
19.9.4 模型評估... 343
19.10 小結... 346
名人推薦
這本書概念清晰,講解通俗易懂,實例非常豐富,是一本適合通過實踐的方式學習大數據的書籍。尤其是書中的商業案例,極具參考價值,相信每位讀者都能從中汲取相應的知識與啟發。
——見知集團董事長 張之戈
本書是一本不可多得的大數據實踐類書籍。從大數據分散式環境的搭建,到HDFS、MapReduce、Hive、Zookeeper、Flume、Kafka和Redis等技術,書中均有涉獵,並延伸到了大數據的商業套用案例。讀完本書,你可以全面掌握大數據的核心技術及具體套用。
——中軟國際CTO 徐建民
作為一本大數據專業書籍,本書傾向於動手實踐,通過大量的實例代碼分析,幫助讀者理解和實踐。另外,作者還專門錄製了大數據核心技術教學視頻,這必將極大地提高讀者的學習效率。
——慧科集團研究院院長 陳瀅
本書注重實踐,手把手帶領讀者學習,可讀性很強,適合小白閱讀,非常棒。
——微軟高級架構師 韓亮
本書由淺入深地介紹了大數據相關技術,並圍繞相關技術給出了大量的代碼實例,將理論知識套用於項目開發實踐,而且講解非常通俗易懂,是一本的Hadoop大數據分析學習手冊。
——51CTO學院總監 張寶龍
這是我看過的最接地氣的大數據實踐類圖書。無論是對於想要學習大數據的入門者,還是對於有一定大數據開發經驗的從業者,本書都極具參考價值。
——CDA數據分析師協會理事 趙堅毅
這本書很接地氣,非常適合想通過動手實踐學習大數據的人員。作者將教會你如何在短時間內上手大數據,並編寫出可以實際運行的大數據項目。
——大唐網路副總裁 張文杰
作者簡介
溫春水 畢業於中國人民大學,獲碩士學位。歷任森途國信新工科研究院院長、大唐網路和三點一刻大數據技術總監,負責大數據技術架構。12年以上的IT從業經驗,其中從事IT培訓超過5年,直接授課學員超過3萬人。受邀為燕山石化和中國石油等企業完成Python及大數據技術等企業內訓;受聘面向哈爾濱工業大學、南開大學、天津大學、華南農業大學、山東科技大學、北京交通大學、西安交通大學、天津師範大學和北京航空航天大學等高校的本科生及研究生講授項目管理、需求分析、軟體體系設計和項目開發等課程。
畢潔馨 亞信科技高級開發工程師。參與過北京聯通看板中心及專線透明化建設,另外還參與過相關公司的門店客流分析平台和分散式網路爬蟲等多個項目的開發工作。目前致力於大數據和人工智慧方向的前沿技術研究。