前言 ...............................................................................................................XV
緻謝 ............................................................................................................XVII
關於本書 ..................................................................................................... XIX
第1 部分 背景和基本原理...............................................1
1 跳躍中的Hadoop....................................................................................... 3
1.1 什麼是Hadoop ................................................................................................. 4
1.1.1 Hadoop 的核心組件 ............................................................................ 5
1.1.2 Hadoop 生態圈 .................................................................................... 9
1.1.3 物理架構 ............................................................................................ 10
1.1.4 誰在使用Hadoop .............................................................................. 12
1.1.5 Hadoop 的局限性 .............................................................................. 13
1.2 運行Hadoop ................................................................................................... 14
1.2.1 下載並安裝Hadoop .......................................................................... 14
1.2.2 Hadoop 的配置 .................................................................................. 15
1.2.3 CLI 基本命令 ..................................................................................... 17
1.2.4 運行MapReduce 作業 ....................................................................... 18
1.3 本章小結 ........................................................................................................ 24
第2 部分 數據邏輯....................................................... 25
2 將數據導入導齣Hadoop.........................................................27
2.1 導入導齣的關鍵要素 .................................................................................... 29
2.2 將數據導入Hadoop ....................................................................................... 30
2.2.1 將日誌文件導入Hadoop .................................................................. 31
技術點1 使用Flume 將係統日誌文件導入HDFS ............................. 33
2.2.2 導入導齣半結構化和二進製文件 .................................................... 42
技術點2 自動復製文件到HDFS 的機製 ............................................ 43
技術點3 使用Oozie 定期執行數據導入活動 ..................................... 48
2.2.3 從數據庫中拉數據 ............................................................................ 52
技術點4 使用MapReduce 將數據導入數據庫 ................................... 53
技術點5 使用Sqoop 從MySQL 導入數據 ......................................... 58
2.2.4 HBase ................................................................................................. 68
技術點6 HBase 導入HDFS ................................................................. 68
技術點7 將HBase 作為MapReduce 的數據源 .................................. 70
2.3 將數據導齣Hadoop ....................................................................................... 73
2.3.1 將數據導入本地文件係統 ................................................................ 73
技術點8 自動復製HDFS 中的文件 .................................................... 73
2.3.2 數據庫 ................................................................................................ 74
技術點9 使用Sqoop 將數據導入MySQL .......................................... 75
2.3.3 Hbase .................................................................................................. 78
技術點10 將數據從HDFS 導入HBase .............................................. 78
技術點11 使用HBase 作為MapReduce 的數據接收器 .................... 79
2.4 本章小結 ........................................................................................................ 81
3 數據序列化——處理文本文件及其他格式的文件........................83
3.1 瞭解MapReduce 中的輸入和輸齣 ............................................................... 84
3.1.1 數據輸入 ............................................................................................ 85
3.1.2 數據輸齣 ............................................................................................ 89
3.2 處理常見的序列化格式 ................................................................................ 91
3.2.1 XML ................................................................................................... 91
技術點12 MapReduce 和XML ............................................................ 91
3.2.2 JSON ................................................................................................... 95
技術點13 MapReduce 和JSON ........................................................... 95
3.3 大數據的序列化格式 .................................................................................... 99
3.3.1 比較SequenceFiles、Protocol Buffers、Thrift 和 Avro .................. 99
3.3.2 Sequence File .................................................................................... 101
技術點14 處理SequenceFile .............................................................. 103
3.3.3 Protocol Buffers ................................................................................ 109
技術點15 整閤Protocol Buffers 和MapReduce ............................... 110
3.3.4 Thrift ................................................................................................. 117
技術點16 使用Thrift .......................................................................... 117
3.3.5 Avro .................................................................................................. 119
技術點17 MapReduce 的下一代數據序列化技術 ............................ 120
3.4 自定義文件格式 .......................................................................................... 127
3.4.1 輸入輸齣格式 .................................................................................. 127
技術點18 輸入和輸齣格式為CSV 的文件 ...................................... 128
3.4.2 output committing 的重要性 ........................................................... 136
3.5 本章小結 ...................................................................................................... 136
第3 部分 大數據模式..................................................137
4 處理大數據的MapReduce 模式............................................. 139
4.1 Join ................................................................................................................ 140
4.1.1 Repartition Join ................................................................................ 141
技術點19 優化repartition join ........................................................... 142
4.1.2 Replicated Join ................................................................................. 146
4.1.3 Semi-join .......................................................................................... 147
技術點20 實現semi-join .................................................................... 148
4.1.4 為你的數據挑選最優的閤並策略 .................................................. 154
4.2 排序 .............................................................................................................. 155
4.2.1 二次排序 .......................................................................................... 156
技術點21 二次排序的實現 ................................................................ 157
4.2.2 整體並行排序 .................................................................................. 162
技術點22 通過多個reducer 對key 進行排序 .................................. 162
4.3 抽樣 .............................................................................................................. 165
技術點23 蓄水池抽樣(reservoir 抽樣) ........................................... 165
4.4 本章小結 ...................................................................................................... 168
5 優化HDFS 處理大數據的技術............................................... 169
5.1 處理小文件 .................................................................................................. 170
技術點24 使用Avro 存儲大量小文件 .............................................. 170
5.2 通過壓縮提高數據存儲效率 ...................................................................... 178
技術點25 選擇閤適的壓縮解碼器 .................................................... 178
技術點26 在HDFS、MapReduce、Pig 和Hive 中使用數據壓縮 .. 182
技術點27 在MapReduce、Hive 和Pig 中處理可分割的LZOP ..... 187
5.3 本章小結 ...................................................................................................... 193
6 診斷和優化性能問題............................................................. 194
6.1 衡量MapReduce 和你的環境 ..................................................................... 195
6.1.1 提取作業統計信息的工具 .............................................................. 195
6.1.2 監控 .................................................................................................. 196
6.2 確定性能問題的原因 .................................................................................. 198
6.2.1 瞭解哪些因素會影響MapReduce 作業的性能 ............................. 198
6.2.2 map 端異常 ...................................................................................... 200
技術點28 發現輸入數據中的坑 ........................................................ 200
技術點29 確定map 端數據傾斜問題 ............................................... 201
技術點30 判定map 任務吞吐量 ....................................................... 203
技術點31 小文件 ................................................................................ 204
技術點32 不可切割的文件 ................................................................ 206
6.2.3 reduce 端問題 .................................................................................. 207
技術點33 reducer 任務數過大或過小 ............................................... 208
技術點34 定位reduce 端數據傾斜問題 ............................................ 209
技術點35 確定reduce 任務是否存在整體吞吐量過低 .................... 211
技術點36 緩慢的洗牌(shuffle)和排序 ......................................... 213
6.2.4 任務的一般性能問題 ...................................................................... 213
技術點37 作業競爭和調度器限製 .................................................... 215
技術點38 使用堆轉儲來查找未優化的用戶代碼 ............................ 216
6.2.5 硬件性能問題 .................................................................................. 218
技術點39 查找硬件的失效 ................................................................ 218
技術點40 CPU 競爭 ........................................................................... 219
技術點41 內存交換 ............................................................................ 220
技術點42 磁盤健康 ............................................................................ 222
技術點43 網絡 .................................................................................... 224
6.3 可視化 .......................................................................................................... 226
技術點44 提取並可視化任務執行時間 ............................................ 227
6.4 優化 ............................................................................................................. 229
6.4.1 剖析MapReduce 的用戶代碼 ......................................................... 230
技術點45 剖析map 和reduce 任務 ................................................... 230
6.4.2 參數配置 .......................................................................................... 232
6.4.3 優化 shuffle 和 sort 階段 ................................................................. 234
技術點46 避免reducer ....................................................................... 234
技術點47 過濾和投影 ........................................................................ 235
技術點48 使用 combiner .................................................................... 236
技術點49 超炫的使用比較器的快速排序 ........................................ 237
6.4.4 減輕傾斜 .......................................................................................... 241
技術點50 收集傾斜數據 .................................................................... 242
技術點51 減輕reducer 階段傾斜 ...................................................... 243
6.4.5 在MapReduce 中優化用戶的Java 代碼 ........................................ 244
6.4.6 數據序列化 ...................................................................................... 248
6.5 本章小結 ...................................................................................................... 249
第4 部分 數據科學.......................................................251
7 數據結構和算法的運用.......................................................... 253
7.1 使用圖進行數據建模和解決問題 .............................................................. 254
7.1.1 模擬圖 .............................................................................................. 255
7.1.2 最短路徑算法 .................................................................................. 255
技術點52 找齣兩個用戶間的最短距離 ............................................ 256
7.1.3 friends-of-friends(FoF) ................................................................. 263
技術點53 計算FoF ............................................................................. 263
7.1.4 PageRank .......................................................................................... 269
技術點54 通過Web 圖計算PageRank .............................................. 269
7.2 Bloom filter ................................................................................................... 275
技術點55 在MapReduce 中並行創建Bloom filter ......................... 277
技術點56 通過MapReduce 對Bloom filter 進行semi-join ............. 281
7.3 本章小結 ...................................................................................................... 284
8 結閤R 和Hadoop 進行數據統計............................................ 285
8.1 比較R 和MapReduce 集成的幾種方法 .................................................... 286
8.2 R 基礎知識 ................................................................................................... 288
8.3 R 和Streaming ............................................................................................. 290
8.3.1 Streaming 和map-only R ................................................................. 290
技術點57 計算股票日平均值 ............................................................ 290
8.3.2 Streaming、R 和完整的MapReduce .............................................. 293
技術點58 計算股票的纍積均值 ........................................................ 293
8.4 Rhipe——將客戶端R 和Hadoop 進行集成 ............................................. 297
技術點59 使用Rhipe 計算CMA ....................................................... 297
8.5 RHadoop——更簡單地在客戶端集成R 和Hadoop 的技術 .................... 301
技術點60 使用RHadoop 計算CMA ................................................. 302
8.6 本章小結 ...................................................................................................... 304
9 使用Mahout 進行預測分析................................................... 305
9.1 使用recommender 提供産品建議 .............................................................. 306
9.1.1 相似性度量的可視化 ...................................................................... 307
9.1.2 GroupLens 數據集 ........................................................................... 308
9.1.3 基於用戶的recommender ............................................................... 310
9.1.4 基於物品的recommender ............................................................... 310
技術點61 使用基於物品的recommender 進行電影評級 ................ 311
9.2 classification ................................................................................................. 314
9.2.1 編寫一個手動naïve Bayesian 分類器 ............................................ 315
9.2.2 可擴展的垃圾郵件偵測分類係統 .................................................. 321
技術點62 使用Mahout 訓練和測試垃圾郵件分類器 ...................... 321
9.2.3 其他分類算法 .................................................................................. 325
9.3 K-means clustering ....................................................................................... 325
9.3.1 簡單介紹 .......................................................................................... 326
9.3.2 並行執行K-means ........................................................................... 327
技術點63 K-means 處理閤成的二維數據集 ..................................... 327
9.3.3 K-means 和文本 ............................................................................... 331
9.3.4 其他Mahout clustering 算法 ........................................................... 332
9.4 本章小結 ...................................................................................................... 332
第5 部分 馴服大象......................................................333
10 深入解析 Hive.................................................................. 335
10.1 Hive 基礎 ................................................................................................ 336
10.1.1 安裝 .......................................................................................... 336
10.1.2 元存儲 ...................................................................................... 336
10.1.3 數據庫、錶、分區和存儲 ...................................................... 336
10.1.4 數據模型 .................................................................................. 337
10.1.5 查詢語言 .................................................................................. 337
10.1.6 交互式和非交互式Hive ......................................................... 337
10.2 使用Hive 進行數據分析 ....................................................................... 338
10.2.1 序列化和反序列化 .................................................................. 338
技術點64 載入日誌文件 .............................................................. 338
10.2.2 UDF、分區、分桶和壓縮 ...................................................... 344
技術點65 編寫UDF 和壓縮分區錶 ............................................ 344
10.2.3 數據閤並 .................................................................................. 350
技術點66 優化Hive 閤並 ............................................................ 350
10.2.4 分組、排序和explain ............................................................. 355
10.3 本章小結 ................................................................................................ 358
11 Pig 流管道......................................................................... 359
11.1 Pig 基礎 .................................................................................................. 360
11.1.1 安裝 .......................................................................................... 360
11.1.2 架構 .......................................................................................... 360
11.1.3 PigLatin..................................................................................... 360
11.1.4 數據類型 .................................................................................. 361
11.1.5 操作符和函數 .......................................................................... 361
11.1.6 交互式和非交互式的Pig ........................................................ 362
11.2 使用Pig 在日誌數據中發現惡意行為者 ............................................. 362
11.2.1 加載數據 .................................................................................. 363
技術點67 加載Apache 日誌文件 ................................................ 363
11.2.2 過濾和投影 .............................................................................. 368
技術點68 通過過濾和投影減少數據處理量 .............................. 368
11.2.3 分組和聚閤UDF ..................................................................... 370
技術點69 IP 地址的分組和計數 ................................................. 370
11.2.4 使用UDF 進行定位 ................................................................ 374
技術點70 使用分布式緩存進行IP 地理定位 ............................ 375
11.2.5 流 .............................................................................................. 378
技術點71 使用你的腳本閤並Pig ............................................... 378
11.2.6 閤並 .......................................................................................... 379
技術點72 在Pig 中閤並數據 ...................................................... 380
11.2.7 排序 .......................................................................................... 381
技術點73 元組排序 ...................................................................... 381
11.2.8 存儲數據 .................................................................................. 382
技術點74 在SequenceFiles 中存儲數據 ..................................... 382
11.3 使用Pig 優化用戶的工作流程 ............................................................. 385
技術點75 通過4 步快速處理大數據 .......................................... 385
11.4 性能 ......................................................................................................... 390
技術點76 Pig 優化 ....................................................................... 390
11.5 本章小結 ................................................................................................. 393
12 Crunch 及相關技術............................................................ 394
12.1 什麼是Crunch ........................................................................................ 395
12.1.1 背景和概念 .............................................................................. 395
12.1.2 基本原理 .................................................................................. 395
12.1.3 簡單示例 .................................................................................. 398
12.2 發現日誌中最熱門的URL .................................................................... 401
技術點77 使用Crunch 進行日誌解析和基本分析 .................... 402
12.3 閤並 ........................................................................................................ 405
技術點78 Crunch 的repartition join ............................................ 405
12.4 Cascading ................................................................................................ 407
12.5 本章小結 ................................................................................................ 409
13 測試和調試....................................................................... 410
13.1 測試 ........................................................................................................ 410
13.1.1 有效的單元測試的基本要素 .................................................. 411
13.1.2 MRUnit ..................................................................................... 413
技術點79 MapReduce 函數、作業和管道的單元測試 ............. 413
13.1.3 LocalJobRunner ........................................................................ 420
技術點80 用LocalJobRunner 進行重量級的作業測試 ............. 421
13.1.4 集成和QA 測試 ...................................................................... 423
13.2 調試用戶空間的問題 ............................................................................ 424
13.2.1 訪問任務日誌 .......................................................................... 424
技術點81 檢查任務日誌 .............................................................. 424
13.2.2 調試不可預期的輸入 .............................................................. 429
技術點82 定位input split 問題 .................................................... 429
13.2.3 調試JVM 配置 ........................................................................ 432
技術點83 解決任務的JVM 啓動參數 ........................................ 433
13.2.4 高效調試的編碼準則 .............................................................. 433
技術點84 調試和錯誤處理 .......................................................... 433
13.3 MapReduce 陷阱 .................................................................................... 437
技術點85 MapReduce 反模式 ..................................................... 438
13.4 本章小結 ................................................................................................ 441
附錄A 相關技術..................................................................... 443
附錄B Hadoop 內置的數據導入導齣工具.................................. 471
附錄C HDFS 解剖................................................................. 486
附錄D 優化MapReduce 閤並框架............................................ 493
索引.......................................................................................... 503
· · · · · · (
收起)