內容簡介
本書介紹了Hadoop技術的相關知識,並將理論知識與實際項目相結合。全書共分為三個部分:基礎篇、套用篇和總結篇。基礎篇詳細介紹了Hadoop、YARN、MapReduce、HDFS、Hive、Sqoop和HBase,並深入探討了Hadoop的運維和調優;套用篇則包含了一個具有代表性的完整的基於Hadoop的商業智慧型系統的設計和實現;結束篇對全書進行總結,並對技術發展做了展望。
圖書目錄
基礎篇:Hadoop基礎
第 1章 緒論 2
1.1 Hadoop和雲計算 2
1.1.1 Hadoop的電梯演講 2
1.1.2 Hadoop生態圈 3
1.1.3 雲計算的定義 6
1.1.4 雲計算的類型 7
1.1.5 Hadoop和雲計算 8
1.2 Hadoop和大數據 9
1.2.1 大數據的定義 9
1.2.2 大數據的結構類型 10
1.2.3 大數據行業套用實例 12
1.2.4 Hadoop和大數據 13
1.2.5 其他大數據處理平台 14
1.3 數據挖掘和商業智慧型 15
1.3.1 數據挖掘的定義 15
1.3.2 數據倉庫 17
1.3.3 運算元據庫系統和數據倉庫系統的區別 18
1.3.4 為什麼需要分離的數據倉庫 19
1.3.5 商業智慧型 19
1.3.6 大數據時代的商業智慧型 20
1.4 小結 21
第 2章 環境準備 22
2.1 Hadoop的發行版本選擇 22
2.1.1 Apache Hadoop 22
2.1.2 CDH 22
2.1.3 Hadoop的版本 23
2.1.4 如何選擇Hadoop的版本 25
2.2 Hadoop架構 26
2.2.1 Hadoop HDFS架構 27
2.2.2 YARN架構 28
2.2.3 Hadoop架構 28
2.3 安裝Hadoop 29
2.3.1 安裝運行環境 30
2.3.2 修改主機名和用戶名 36
2.3.3 配置靜態IP位址 36
2.3.4 配置SSH無密碼連線 37
2.3.5 安裝JDK 38
2.3.6 配置Hadoop 39
2.3.7 格式化HDFS 42
2.3.8 啟動Hadoop並驗證安裝 42
2.4 安裝Hive 43
2.4.1 安裝元資料庫 44
2.4.2 修改Hive配置檔案 44
2.4.3 驗證安裝 45
2.5 安裝HBase 46
2.5.1 解壓檔案並修改Zookeeper相關配置 46
2.5.2 配置節點 46
2.5.3 配置環境變數 47
2.5.4 啟動並驗證 47
2.6 安裝Sqoop 47
2.7 Cloudera Manager 48
2.8 小結 51
第3章 Hadoop的基石:HDFS 52
3.1 認識HDFS 52
3.1.1 HDFS的設計理念 54
3.1.2 HDFS的架構 54
3.1.3 HDFS容錯 58
3.2 HDFS讀取檔案和寫入檔案 58
3.2.1 塊的分布 59
3.2.2 數據讀取 60
3.2.3 寫入數據 61
3.2.4 數據完整性 62
3.3 如何訪問HDFS 63
3.3.1 命令行接口 63
3.3.2 Java API 66
3.3.3 其他常用的接口 75
3.3.4 Web UI 75
3.4 HDFS中的新特性 76
3.4.1 NameNode HA 76
3.4.2 NameNode Federation 78
3.4.3 HDFS Snapshots 79
3.5 小結 79
第4章 YARN:統一資源管理和調平台 80
4.1 YARN是什麼 80
4.2 統一資源管理和調度平台范型 81
4.2.1 集中式調度器 81
4.2.2 雙層調度器 81
4.2.3 狀態共享調度器 82
4.3 YARN的架構 82
4.3.1 ResourceManager 83
4.3.2 NodeManager 85
4.3.3 ApplicationMaster 87
4.3.4 YARN的資源表示模型Container 87
4.4 YARN的工作流程 88
4.5 YARN的調度器 89
4.5.1 YARN的資源管理機制 89
4.5.2 FIFO Scheduler 90
4.5.3 Capacity Scheduler 90
4.5.4 Fair Scheduler 91
4.6 YARN命令行 92
4.7 Apache Mesos 95
4.8 小結 96
第5章 分而治之的智慧:MapReduce 97
5.1 認識MapReduce 97
5.1.1 MapReduce的編程思想 98
5.1.2 MapReduce運行環境 100
5.1.3 MapReduce作業和任務 102
5.1.4 MapReduce的計算資源劃分 102
5.1.5 MapReduce的局限性 103
5.2 Hello Word Count 104
5.2.1 Word Count的設計思路 104
5.2.2 編寫Word Count 105
5.2.3 運行程式 107
5.2.4 還能更快嗎 109
5.3 MapReduce的過程 109
5.3.1 從輸入到輸出 109
5.3.2 input 110
5.3.3 map及中間結果的輸出 112
5.3.4 shuffle 113
5.3.5 reduce及最後結果的輸出 115
5.3.6 sort 115
5.3.7 作業的進度組成 116
5.4 MapReduce的工作機制 116
5.4.1 作業提交 117
5.4.2 作業初始化 118
5.4.3 任務分配 118
5.4.4 任務執行 118
5.4.5 任務完成 118
5.4.6 推測執行 119
5.4.7 MapReduce容錯 119
5.5 MapReduce編程 120
5.5.1 Writable類 120
5.5.2 編寫Writable類 123
5.5.3 編寫Mapper類 124
5.5.4 編寫Reducer類 125
5.5.5 控制shuffle 126
5.5.6 控制sort 128
5.5.7 編寫main函式 129
5.6 MapReduce編程實例:連線 130
5.6.1 設計思路 131
5.6.2 編寫Mapper類 131
5.6.3 編寫Reducer類 132
5.6.4 編寫main函式 133
5.7 MapReduce編程實例:二次排序 134
5.7.1 設計思路 134
5.7.2 編寫Mapper類 135
5.7.3 編寫Partitioner類 136
5.7.4 編寫SortComparator類 136
5.7.5 編寫Reducer類 137
5.7.6 編寫main函式 137
5.8 MapReduce編程實例:全排序 139
5.8.1 設計思路 139
5.8.2 編寫代碼 140
5.9 小結 141
第6章 SQL on Hadoop:Hive 142
6.1 認識Hive 142
6.1.1 從MapReduce到SQL 143
6.1.2 Hive架構 144
6.1.3 Hive與關係型資料庫的區別 146
6.1.4 Hive命令的使用 147
6.2 數據類型和存儲格式 149
6.2.1 基本數據類型 149
6.2.2 複雜數據類型 149
6.2.3 存儲格式 150
6.2.4 數據格式 151
6.3 HQL:數據定義 152
6.3.1 Hive中的資料庫 152
6.3.2 Hive中的表 154
6.3.3 創建表 154
6.3.4 管理表 156
6.3.5 外部表 156
6.3.6 分區表 156
6.3.7 刪除表 158
6.3.8 修改表 158
6.4 HQL:數據操作 159
6.4.1 裝載數據 159
6.4.2 通過查詢語句向表中插入數據 160
6.4.3 利用動態分區向表中插入數據 160
6.4.4 通過CTAS載入數據 161
6.4.5 導出數據 161
6.5 HQL:數據查詢 162
6.5.1 SELECT…FROM語句 162
6.5.2 WHERE語句 163
6.5.3 GROUP BY和HAVING語句 164
6.5.4 JOIN語句 164
6.5.5 ORDER BY和SORT BY語句 166
6.5.6 DISTRIBUTE BY和SORT BY
語句 167
6.5.7 CLUSTER BY 167
6.5.8 分桶和抽樣 168
6.5.9 UNION ALL 168
6.6 Hive函式 168
6.6.1 標準函式 168
6.6.2 聚合函式 168
6.6.3 表生成函式 169
6.7 Hive用戶自定義函式 169
6.7.1 UDF 169
6.7.2 UDAF 170
6.7.3 UDTF 171
6.7.4 運行 173
6.8 小結 173
第7章 SQL to Hadoop : Sqoop 174
7.1 一個Sqoop示例 174
7.2 導入過程 176
7.3 導出過程 178
7.4 Sqoop的使用 179
7.4.1 codegen 180
7.4.2 create-hive-table 180
7.4.3 eval 181
7.4.4 export 181
7.4.5 help 182
7.4.6 import 182
7.4.7 import-all-tables 183
7.4.8 job 184
7.4.9 list-databases 184
7.4.10 list-tables 184
7.4.11 merge 184
7.4.12 metastore 185
7.4.13 version 186
7.5 小結 186
第8章 HBase:HadoopDatabase 187
8.1 酸和鹼:兩種資料庫事務方法論 187
8.1.1 ACID 188
8.1.2 BASE 188
8.2 CAP定理 188
8.3 NoSQL的架構模式 189
8.3.1 鍵值存儲 189
8.3.2 圖存儲 190
8.3.3 列族存儲 191
8.3.4 文檔存儲 192
8.4 HBase的架構模式 193
8.4.1 行鍵、列族、列和單元格 193
8.4.2 HMaster 194
8.4.3 Region和RegionServer 195
8.4.4 WAL 195
8.4.5 HFile 195
8.4.6 Zookeeper 197
8.4.7 HBase架構 197
8.5 HBase寫入和讀取數據 198
8.5.1 Region定位 198
8.5.2 HBase寫入數據 199
8.5.3 HBase讀取數據 199
8.6 HBase基礎API 200
8.6.1 創建表 201
8.6.2 插入 202
8.6.3 讀取 203
8.6.4 掃描 204
8.6.5 刪除單元格 206
8.6.6 刪除表 207
8.7 HBase高 級API 207
8.7.1 過濾器 208
8.7.2 計數器 208
8.7.3 協處理器 209
8.8 小結 214
第9章 Hadoop性能調優和運維 215
9.1 Hadoop客戶端 215
9.2 Hadoop性能調優 216
9.2.1 選擇合適的硬體 216
9.2.2 作業系統調優 218
9.2.3 JVM調優 219
9.2.4 Hadoop參數調優 219
9.3 Hive性能調優 225
9.3.1 JOIN最佳化 226
9.3.2 Reducer的數量 226
9.3.3 列裁剪 226
9.3.4 分區裁剪 226
9.3.5 GROUP BY最佳化 226
9.3.6 合併小檔案 227
9.3.7 MULTI-GROUP BY和MULTI-INSERT 228
9.3.8 利用UNION ALL 特性 228
9.3.9 並行執行 228
9.3.10 全排序 228
9.3.11 Top N 229
9.4 HBase調優 229
9.4.1 通用調優 229
9.4.2 客戶端調優 230
9.4.3 寫調優 231
9.4.4 讀調優 231
9.4.5 表設計調優 232
9.5 Hadoop運維 232
9.5.1 集群節點動態擴容和卸載 233
9.5.2 利用SecondaryNameNode恢復NameNode 234
9.5.3 常見的運維技巧 234
9.5.4 常見的異常處理 235
9.6 小結 236
套用篇:商業智慧型系統項目實戰
第 10章 線上圖書銷售商業智慧型系統 238
10.1 項目背景 238
10.2 功能需求 239
10.3 非功能需求 240
10.4 小結 240
第 11章 系統結構設計 241
11.1 系統架構 241
11.2 功能設計 242
11.3 數據倉庫結構 243
11.4 系統網路拓撲與硬體選型 246
11.4.1 系統網路拓撲 246
11.4.2 系統硬體選型 248
11.5 技術選型 249
11.5.1 平台選型 249
11.5.2 系統開發語言選型 249
11.6 小結 249
第 12章 在開發之前 250
12.1 新建一個工程 250
12.1.1 安裝Python 250
12.1.2 安裝PyDev外掛程式 251
12.1.3 新建PyDev項目 252
12.2 代碼結構 253
12.3 項目的環境變數 253
12.4 如何調試 254
12.5 小結 254
第 13章 實現數據導入導出模組 255
13.1 處理流程 255
13.2 導入方式 256
13.2.1 全量導入 256
13.2.2 增量導入 256
13.3 讀取配置檔案 257
13.4 SqoopUtil 261
13.5 整合 262
13.6 導入說明 262
13.7 導出模組 263
13.8 小結 265
第 14章 實現數據分析工具模組 266
14.1 處理流程 266
14.2 讀取配置檔案 266
14.3 HiveUtil 268
14.4 整合 268
14.5 數據分析和報表 269
14.5.1 OLAP和Hive 269
14.5.2 OLAP和多維模型 270
14.5.3 選MySQL還是選HBase 272
14.6 小結 273
第 15章 實現業務數據的數據清洗
模組 274
15.1 ETL 274
15.1.1 數據抽取 274
15.1.2 數據轉換 274
15.1.3 數據清洗工具 275
15.2 處理流程 275
15.3 數據去重 276
15.3.1 產生原因 276
15.3.2 去重方法 277
15.3.3 一個很有用的UDF:
RowNum 277
15.3.4 第 二種去重方法 279
15.3.5 進行去重 279
15.4 小結 282
第 16章 實現點擊流日誌的數據清洗
模組 283
16.1 數據倉庫和Web 283
16.2 處理流程 285
16.3 欄位的獲取 285
16.4 編寫MapReduce作業 288
16.4.1 編寫IP位址解析器 288
16.4.2 編寫Mapper類 291
16.4.3 編寫Partitioner類 295
16.4.4 編寫SortComparator類 295
16.4.5 編寫Reducer類 297
16.4.6 編寫main函式 298
16.4.7 通過Python調用jar檔案 299
16.5 還能做什麼 300
16.5.1 網站分析的指標 300
16.5.2 網站分析的決策支持 301
16.6 小結 301
第 17章 實現購書轉化率分析模組 302
17.1 漏斗模型 302
17.2 處理流程 303
17.3 讀取配置檔案 303
17.4 提取所需數據 304
17.5 編寫轉化率分析MapReduce作業 305
17.5.1 編寫Mapper類 306
17.5.2 編寫Partitioner類 308
17.5.3 編寫SortComparator類 309
17.5.4 編寫Reducer類 310
17.5.5 編寫Driver類 312
17.5.6 通過Python模組調用jar檔案 314
17.6 對中間結果進行匯總得到最終 結果 314
17.7 整合 316
17.8 小結 316
第 18章 實現購書用戶聚類模組 317
18.1 物以類聚 317
18.2 聚類算法 318
18.2.1 k-means算法 318
18.2.2 Canopy算法 319
18.2.3 數據向量化 320
18.2.4 數據歸一化 321
18.2.5 相似性度量 322
18.3 用MapReduce實現聚類算法 323
18.3.1 Canopy算法與MapReduce 323
18.3.2 k-means算法與MapReduce 323
18.3.3 Apache Mahout 324
18.4 處理流程 324
18.5 提取數據並做歸一化 325
18.6 維度相關性 327
18.6.1 維度的選取 327
18.6.2 相關係數與相關係數矩陣 328
18.6.3 計算相關係數矩陣 328
18.7 使用Mahout完成聚類 329
18.7.1 使用Mahout 329
18.7.2 解析Mahout的輸出 332
18.7.3 得到聚類結果 334
18.8 得到最終結果 335
18.9 評估聚類結果 337
18.9.1 一份不適合聚類的數據 337
18.9.2 簇間距離和簇內距離 337
18.9.3 計算平均簇間距離 338
18.10 小結 339
第 19章 實現調度模組 340
19.1 工作流 340
19.2 編寫代碼 341
19.3 crontab 342
19.4 讓數據說話 343
19.5 小結 344
結束篇:總結和展望
第 20章 總結和展望 346
20.1 總結 346
20.2 BDAS 347
20.3 Dremel系技術 348
20.4 Pregel系技術 349
20.5 Docker和Kubernetes 350
20.6 數據集成工具NiFi 350
20.7 小結 351
參考文獻 352