目錄
基礎篇: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
· · · · · · (
收起)