內容簡介
Hadoop是一個開源的MapReduce平台,設計運行在大型分散式集群環境中,提供查詢和分析服務。尤其適用於大數據系統,Hadoop為蘋果、eBay、LinkedIn、雅虎和Facebook等公司提供重要軟體環境。它為開發者進行數據存儲、管理以及分析提供便利的方法。
《Hadoop硬實戰》收集了85個問題場景以及解決方案的實戰演練。在關鍵問題領域對基礎概念和實戰方法做了權衡,例如導入導出、序列化,以及LZO壓縮。你將會學習到每個技術的細節,以及當遇到一個具體問題時能夠給出對應的解決方案。本書提供了結構良好且易於理解的例子,可用於應對你所遇到的問題。
本書包含:
·Hadoop和MapReduce的基本概念
·85個實戰和測試技術
·真實的場景,實用的解決方案
·如何整合MapReduce和R
Hadoop 硬實戰( 學習 Hadoop 和 Mapreduce 不二之選 85 個 Hadoop 高級技巧實戰案例 )
[ 美]Alex Holmes((亞歷克斯.霍姆斯))著
梁李印 寧青 楊卓犖 譯
ISBN 978-7-121-25072-9
2015 年1月出版
定價:99.00元
536 頁
16 開
編輯推薦
Hadoop是一個開源的MapReduce平台,設計運行在大型分散式集群環境中,提供查詢和分析服務。尤其適用於大數據系統,Hadoop為蘋果、eBay、LinkedIn、雅虎和Facebook等公司提供重要軟體環境。它為開發者進行數據存儲、管理以及分析提供便利的方法。
《Hadoop硬實戰》收集了85個問題場景以及解決方案的實戰演練。在關鍵問題領域對基礎概念和實戰方法做了權衡,例如導入導出、序列化,以及LZO壓縮。你將會學習到每個技術的細節,以及當遇到一個具體問題時能夠給出對應的解決方案。本書提供了結構良好且易於理解的例子,可用於應對你所遇到的問題。
本書包含:
·Hadoop和MapReduce的基本概念
·85個實戰和測試技術
·真實的場景,實用的解決方案
·如何整合MapReduce和R
內容提要
Hadoop 是一個開源的MapReduce 平台,設計運行在大型分散式集群環境中,為開發者進行數據存儲、管理以及分析提供便利的方法。《Hadoop硬實戰》詳細講解了Hadoop 和MapReduce 的基本概念,並收集了85 個問題及其解決方案。在關鍵問題領域對基礎概念和實戰方法做了權衡。
《Hadoop硬實戰》適合使用Hadoop 進行數據存儲、管理和分析的技術人員使用。
目錄
前言 ...............................................................................................................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
作者簡介
Alex Holmes是高級軟體工程師,在使用Hadoop解決大數據問題上經驗十分豐富。他曾在JavaOne和Jazoon做過演講並在VeriSign負責技術指導。
媒體評論
有趣的話題,創造性的思維方式。
——Mark Kemna,Brillig
將Hadoop生態圈技術有機整合。
——Ayon Sinha,Britely
全面的、高質量的實例代碼。
——Chris Nauroth,沃特·迪斯尼公司
覆蓋所有Hadoop變種,不僅僅是Apache發行版。
——Ted Dunning,MapR Technologies
規劃了一條通往未來的道路。
——Alexey Gayduk,Grid Dynamics
這是我見過最出色的一本Hadoop書,內容質量高,寫作精良,覆蓋大量有用的實例。其涉及資料的廣度及細節程度,都遠優於其他Hadoop參考書。本書適合那些想跟著非常有實用價值的真實案例學習新工具技術的人群。對於任何一個重度Hadoop用戶、開發者,這本書都非賣不可。
——telescope7
學習Hadoop和Mapreduce絕無僅有的好書!我是一個初學者,沒有任何Hadoop開發經驗。在我開始閱讀本書之前,我在網上看過不少文章。也讀過其他Hadoop書籍。這本書對於我想知道的知識而言,真正做到了包羅萬象,而且對概念的解釋非常細緻詳盡。書中的每部分都組織得很好,寫得也精到。作者的寫作技巧好到令人咋舌,可以用非常質樸和淺顯易懂的方式闡述非常複雜的概念。 完全不用有疑慮,書中實例也同樣富於實戰性和有實用價值,涉及Hadoop眾多不用的套用領域。不像很多隻玩湊字遊戲的網路教程,這本書的例子都是真實的,可以直接拿來用。
——Chenghai
前言
我是在2008 年秋天參加VeriSign 的網際網路抓取和分析項目的時候開始接觸Hadoop 的,我的團隊與Doug Cutting 以及Nutch 項目的人就如何有效地存儲和管理TB 級的抓取數據和分析數據得出相似的結論。當時我們已經建立了自己的分散式系統,但是這個系統無法系統地將抓取的數據與新添加的數據合併。
在研究了Hadoop 項目後,我們發現它很適合我們的需求——它支持大數據存儲,並提供數據合併機制。在幾個月的時間內,我們創建並開發了包含多個MapReduce 作業的MapReduce 套用,並將這個套用與我們自己的MapReduce 工作流管理系統部署在一個擁有18 個節點的小集群上。通過這個小集群可以觀察我們的MapReduce 作業是如何在幾分鐘內處理完數據的。當然,我們沒想到的是,在調試和最佳化MapReduce 作業上會花費這么多時間;更沒想到的是,我們擔負起生產管理員這一新職責時,在支持生產的頭幾個月內我們遇到大量的磁碟故障問題。
隨著對Hadoop 熟悉程度的提高,我們運用Hadoop 繼續建立了更多的功能以幫助處理大規模數據集。我們還開始在公司內部宣傳Hadoop 的優點,並發動其他面臨處理大數據的項目使用Hadoop。
在運用Hadoop(尤其是在處理MapReduce 時)的過程中我們遇到的最大挑戰是重新學習如何使用它解決問題。MapReduce 有自己並行處理進程的方法,這種處理方式與我們通常使用的JVM 程式完全不同。最大的障礙就是訓練我們的大腦去熟悉MapReduce 的處理方法,Chuck Lam 在2010 年編寫出版的Hadoop in Action 一書詳細講解了MapReduce 的相關信息。
當你習慣了使用MapReduce 後,接下來就需要學習如何使用Hadoop,如何將數據導入和導出HDFS,如何在Hadoop 中高效處理數據。Hadoop 的這些方面還沒有引起很廣泛的關注,這也是我要撰寫本書的潛在原因——主要介紹Hadoop 的一些高級套用,並涉及Hadoop 的一些難點問題。我相信目前已經有很多讀者有Hadoop 的相關套用經驗,我寫本書的目的只是為了將我的個人經驗轉化為書本知識。我對本書中的實例進行了驗證,這並不是一個愉快的過程,但是編寫本書的過程中所運用到的新方法和工具使我對Hadoop 有了進一步的了解,希望讀者通過本書可以獲取Hadoop 的更多知識。