第Ⅰ部分 Hadoop基礎(chǔ)知識(shí)
第1章 初識(shí)Hadoop 3
1.1 數(shù)據(jù)!數(shù)據(jù)! 3
1.2 數(shù)據(jù)的存儲(chǔ)與分析 5
1.3 查詢所有數(shù)據(jù) 6
1.4 不僅僅是批處理 7
1.5 相較于其他系統(tǒng)的優(yōu)勢 8
1.5.1 關(guān)系型數(shù)據(jù)庫管理系統(tǒng) 8
1.5.2 網(wǎng)格計(jì)算 10
1.5.3 志愿計(jì)算 11
1.6 Apache Hadoop發(fā)展簡史 12
1.7 本書包含的內(nèi)容 16
第2章 關(guān)于MapReduce 19
2.1 氣象數(shù)據(jù)集 19
2.2 使用Unix工具來分析數(shù)據(jù) 21
2.3 使用Hadoop來分析數(shù)據(jù) 22
2.3.1 map和reduce 23
2.3.2 Java MapReduce 24
2.4 橫向擴(kuò)展 31
2.4.1 數(shù)據(jù)流 31
2.4.2 combiner函數(shù) 35
2.4.3 運(yùn)行分布式的
MapReduce作業(yè) 37
2.5 Hadoop Streaming 37
2.5.1 Ruby版本 38
2.5.2 Python版本 40
第3章 Hadoop分布式文件系統(tǒng) 42
3.1 HDFS的設(shè)計(jì) 42
3.2 HDFS的概念 44
3.2.1 數(shù)據(jù)塊 44
3.2.2 namenode和datanode 45
3.2.3 塊緩存 46
3.2.4 聯(lián)邦HDFS 47
3.2.5 HDFS的高可用性 47
3.3 命令行接口 50
3.4 Hadoop文件系統(tǒng) 52
3.5 Java接口 56
3.5.1 從Hadoop URL讀取
數(shù)據(jù) 56
3.5.2 通過FileSystem API
讀取數(shù)據(jù) 58
3.5.3 寫入數(shù)據(jù) 61
3.5.4 目錄 63
3.5.5 查詢文件系統(tǒng) 63
3.5.6 刪除數(shù)據(jù) 68
3.6 數(shù)據(jù)流 68
3.6.1 剖析文件讀取 68
3.6.2 剖析文件寫入 71
3.6.3 一致模型 74
3.7 通過distcp并行復(fù)制 76
第4章 關(guān)于YARN 78
4.1 剖析YARN應(yīng)用運(yùn)行機(jī)制 79
4.1.1 資源請求 80
4.1.2 應(yīng)用生命期 81
4.1.3 構(gòu)建YARN應(yīng)用 81
4.2 YARN與MapReduce 1相比 82
4.3 YARN中的調(diào)度 85
4.3.1 調(diào)度選項(xiàng) 85
4.3.2 容量調(diào)度器配置 87
4.3.3 公平調(diào)度器配置 89
4.3.5 延遲調(diào)度 93
4.3.5 主導(dǎo)資源公平性 94
4.4 延伸閱讀 95
第5章 Hadoop的I/O操作 96
5.1 數(shù)據(jù)完整性 96
5.1.1 HDFS的數(shù)據(jù)完整性 97
5.1.2 LocalFileSystem 98
5.1.3 ChecksumFileSystem 98
5.2 壓縮 99
5.2.1 codec 100
5.2.2 壓縮和輸入分片 105
5.2.3 在MapReduce中使用
壓縮 106
5.3 序列化 109
5.3.1 Writable接口 110
5.3.2 Writable類 112
5.3.3 實(shí)現(xiàn)定制的Writable
集合 121
5.3.4 序列化框架 125
5.4 基于文件的數(shù)據(jù)結(jié)構(gòu) 127
5.4.1 關(guān)于SequenceFile 127
5.4.2 關(guān)于MapFile 135
5.4.3 其他文件格式和
面向列的格式 136
第6章 MapReduce應(yīng)用開發(fā) 141
6.1 用于配置的API 142
6.1.1 資源合并 143
6.1.2 變量擴(kuò)展 144
6.2 配置開發(fā)環(huán)境 144
6.2.1 管理配置 146
6.2.2 輔助類GenericOptionsParser,
Tool和ToolRunner 149
6.3 用MRUnit來寫單元測試 152
6.3.1 關(guān)于Mapper 152
6.3.2 關(guān)于Reducer 156
6.4 本地運(yùn)行測試數(shù)據(jù) 156
6.4.1 在本地作業(yè)運(yùn)行器上
運(yùn)行作業(yè) 156
6.4.2 測試驅(qū)動(dòng)程序 158
6.5 在集群上運(yùn)行 160
6.5.1 打包作業(yè) 160
6.5.2 啟動(dòng)作業(yè) 162
6.5.3 MapReduce的Web
界面 165
6.5.4 獲取結(jié)果 167
6.5.5 作業(yè)調(diào)試 168
6.5.6 Hadoop日志 171
6.5.7 遠(yuǎn)程調(diào)試 173
6.6 作業(yè)調(diào)優(yōu) 174
6.7 MapReduce的工作流 176
6.7.1 將問題分解成
MapReduce作業(yè) 177
6.7.2 關(guān)于JobControl 178
6.7.3 關(guān)于Apache Oozie 179
第7章 MapReduce的工作機(jī)制 184
7.1 剖析MapReduce作業(yè)運(yùn)行
機(jī)制 184
7.1.1 作業(yè)的提交 185
7.1.2 作業(yè)的初始化 186
7.1.3 任務(wù)的分配 187
7.1.4 任務(wù)的執(zhí)行 188
7.1.5 進(jìn)度和狀態(tài)的更新 189
7.1.6 作業(yè)的完成 191
7.2 失敗 191
7.2.1 任務(wù)運(yùn)行失敗 191
7.2.2 application master
運(yùn)行失敗 193
7.2.3 節(jié)點(diǎn)管理器運(yùn)行失敗 193
7.2.4 資源管理器運(yùn)行失敗 194
7.3 shuffle和排序 195
7.3.1 map端 195
7.3.2 reduce端 197
7.3.3 配置調(diào)優(yōu) 199
7.4 任務(wù)的執(zhí)行 201
7.4.1 任務(wù)執(zhí)行環(huán)境 201
7.4.2 推測執(zhí)行 202
7.4.3 關(guān)于
OutputCommitters 204
第8章 MapReduce的
類型與格式 207
8.1 MapReduce的類型 207
8.1.1 默認(rèn)的MapReduce
作業(yè) 212
8.1.2 默認(rèn)的Streaming
作業(yè) 216
8.2 輸入格式 218
8.2.1 輸入分片與記錄 218
8.2.2 文本輸入 229
8.2.3 二進(jìn)制輸入 233
8.2.4 多個(gè)輸入 234
8.2.5 數(shù)據(jù)庫輸入(和輸出) 235
8.3 輸出格式 236
8.3.1 文本輸出 236
8.3.2 二進(jìn)制輸出 237
8.3.3 多個(gè)輸出 237
8.3.4 延遲輸出 242
8.3.5 數(shù)據(jù)庫輸出 242
第9章 MapReduce的特性 243
9.1 計(jì)數(shù)器 243
9.1.1 內(nèi)置計(jì)數(shù)器 243
9.1.2 用戶定義的Java
計(jì)數(shù)器 248
9.1.3 用戶定義的Streaming
計(jì)數(shù)器 251
9.2 排序 252
9.2.1 準(zhǔn)備 252
9.2.2 部分排序 253
9.2.3 全排序 255
9.2.4 輔助排序 259
9.3 連接 264
9.3.1 map端連接 266
9.3.2 reduce端連接 266
9.4 邊數(shù)據(jù)分布 270
9.4.1 利用JobConf來配置
作業(yè) 270
9.4.2 分布式緩存 270
9.5 MapReduce庫類 276
第10章 構(gòu)建Hadoop集群 279
10.1 集群規(guī)范 280
10.1.1 集群規(guī)模 281
10.1.2 網(wǎng)絡(luò)拓?fù)?282
10.2 集群的構(gòu)建和安裝 284
10.2.1 安裝Java 284
10.2.2 創(chuàng)建Unix 用戶賬號(hào) 284
10.2.3 安裝Hadoop 284
10.2.4 SSH配置 285
10.2.5 配置Hadoop 286
10.2.6 格式化HDFS 文件
系統(tǒng) 286
10.2.7 啟動(dòng)和停止守護(hù)
進(jìn)程 286
10.2.8 創(chuàng)建用戶目錄 288
10.3 Hadoop配置 288
10.3.1 配置管理 289
10.3.2 環(huán)境設(shè)置 290
10.3.3 Hadoop守護(hù)進(jìn)程的
關(guān)鍵屬性 293
10.3.4 Hadoop守護(hù)進(jìn)程的
地址和端口 300
10.3.5 Hadoop的其他屬性 303
10.4 安全性 305
10.4.1 Kerberos和Hadoop 306
10.4.2 委托令牌 308
10.4.3 其他安全性改進(jìn) 309
10.5 利用基準(zhǔn)評測程序測試
Hadoop集群 311
10.5.1 Hadoop基準(zhǔn)評測
程序 311
10.5.2 用戶作業(yè) 313
第11章 管理Hadoop 314
11.1 HDFS 314
11.1.1 永久性數(shù)據(jù)結(jié)構(gòu) 314
11.1.2 安全模式 320
11.1.3 日志審計(jì) 322
11.1.4 工具 322
11.2 監(jiān)控 327
11.2.1 日志 327
11.2.2 度量和JMX(Java
管理擴(kuò)展) 328
11.3 維護(hù) 329
11.3.1 日常管理過程 329
11.3.2 委任和解除節(jié)點(diǎn) 331
11.3.3 升級 334
第Ⅳ部分 Hadoop相關(guān)開源項(xiàng)目
第12章 關(guān)于Avro 341
12.1 Avro數(shù)據(jù)類型和模式 342
12.2 內(nèi)存中的序列化和
反序列化特定API 347
12.3 Avro數(shù)據(jù)文件 349
12.4 互操作性 351
12.4.1 Python API 351
12.4.2 Avro工具集 352
12.5 模式解析 352
12.6 排列順序 354
12.7 關(guān)于Avro MapReduce 356
12.8 使用Avro MapReduce
進(jìn)行排序 359
12.9 其他語言的Avro 362
第13章 關(guān)于Parquet 363
13.1 數(shù)據(jù)模型 364
13.2 Parquet文件格式 367
13.3 Parquet的配置 368
13.4 Parquet文件的讀/寫 369
13.4.1 Avro、Protocol Buffers
和Thrift 371
13.4.2 投影模式和讀取
模式 373
13.5 Parquet MapReduce 374
第14章 關(guān)于Flume 377
14.1 安裝Flume 378
14.2 示例 378
14.3 事務(wù)和可靠性 380
14.4 HDFS Sink 382
14.5 扇出 385
14.5.1 交付保證 386
14.5.2 復(fù)制和復(fù)用選擇器 387
14.6 通過代理層分發(fā) 387
14.7 Sink組 391
14.8 Flume與應(yīng)用程序的集成 395
14.9 組件編目 395
14.10 延伸閱讀 397
第15章 關(guān)于Sqoop 398
15.1 獲取Sqoop 398
15.2 Sqoop連接器 400
15.3 一個(gè)導(dǎo)入的例子 401
15.4 生成代碼 404
15.5 深入了解數(shù)據(jù)庫導(dǎo)入 405
15.5.1 導(dǎo)入控制 407
15.5.2 導(dǎo)入和一致性 408
15.5.3 增量導(dǎo)入 408
15.5.4 直接模式導(dǎo)入 408
15.6 使用導(dǎo)入的數(shù)據(jù) 409
15.7 導(dǎo)入大對象 412
15.8 執(zhí)行導(dǎo)出 414
15.9 深入了解導(dǎo)出功能 416
15.9.1 導(dǎo)出與事務(wù) 417
15.9.2 導(dǎo)出和SequenceFile 418
15.10 延伸閱讀 419
第16章 關(guān)于Pig 420
16.1 安裝與運(yùn)行Pig 421
16.1.1 執(zhí)行類型 422
16.1.2 運(yùn)行Pig程序 423
16.1.3 Grunt 424
16.1.4 Pig Latin編輯器 424
16.2 示例 425
16.3 與數(shù)據(jù)庫進(jìn)行比較 428
16.4 PigLatin 429
16.4.1 結(jié)構(gòu) 430
16.4.2 語句 431
16.4.3 表達(dá)式 436
16.4.4 類型 437
16.4.5 模式 438
16.4.6 函數(shù) 443
16.4.7 宏 445
16.5 用戶自定義函數(shù) 446
16.5.1 過濾UDF 447
16.5.2 計(jì)算UDF 450
16.5.3 加載UDF 452
16.6 數(shù)據(jù)處理操作 455
16.6.1 數(shù)據(jù)的加載和存儲(chǔ) 455
16.6.2 數(shù)據(jù)的過濾 455
16.6.3 數(shù)據(jù)的分組與連接 458
16.6.4 數(shù)據(jù)的排序 463
16.6.5 數(shù)據(jù)的組合和切分 465
16.7 Pig實(shí)戰(zhàn) 465
16.7.1 并行處理 465
16.7.2 匿名關(guān)系 466
16.7.3 參數(shù)代換 467
16.8 延伸閱讀 468
第17章 關(guān)于Hive 469
17.1 安裝Hive 470
Hive的shell環(huán)境 471
17.2 示例 472
17.3 運(yùn)行Hive 473
17.3.1 配置Hive 473
17.3.2 Hive服務(wù) 476
17.3.3 Metastore 478
17.4 Hive與傳統(tǒng)數(shù)據(jù)庫相比 480
17.4.1 讀時(shí)模式vs.寫時(shí)
模式 480
17.4.2 更新、事務(wù)和索引 481
17.4.3 其他SQL-on-Hadoop
技術(shù) 482
17.5 HiveQL 483
17.5.1 數(shù)據(jù)類型 484
17.5.2 操作與函數(shù) 487
17.6 表 488
17.6.1 托管表和外部表 488
17.6.2 分區(qū)和桶 490
17.6.3 存儲(chǔ)格式 494
17.6.4 導(dǎo)入數(shù)據(jù) 498
17.6.5 表的修改 500
17.6.6 表的丟棄 501
17.7 查詢數(shù)據(jù) 501
17.7.1 排序和聚集 501
17.7.2 MapReduce腳本 502
17.7.3 連接 503
17.7.4 子查詢 506
17.7.5 視圖 507
17.8 用戶定義函數(shù) 508
17.8.1 寫UDF 510
17.8.2 寫UDAF 512
17.9 延伸閱讀 516
第18章 關(guān)于Crunch 517
18.1 示例 518
18.2 Crunch核心API 521
18.2.1 基本操作 522
18.2.2 類型 527
18.2.3 源和目標(biāo) 530
18.2.4 函數(shù) 532
18.2.5 物化 535
18.3 管線執(zhí)行 537
18.3.1 運(yùn)行管線 538
18.3.2 停止管線 539
18.3.3 查看Crunch計(jì)劃 540
18.3.4 迭代算法 543
18.3.5 給管線設(shè)置檢查點(diǎn) 544
18.4 Crunch庫 545
18.5 延伸閱讀 547
第19章 關(guān)于Spark 548
19.1 安裝Spark 549
19.2 示例 549
19.2.1 Spark應(yīng)用、作業(yè)、
階段和任務(wù) 551
19.2.2 Scala獨(dú)立應(yīng)用 552
19.2.3 Java示例 553
19.2.4 Python示例 554
19.3 彈性分布式數(shù)據(jù)集 555
19.3.1 創(chuàng)建 555
19.3.2 轉(zhuǎn)換和動(dòng)作 557
19.3.3 持久化 561
19.3.4 序列化 563
19.4 共享變量 564
19.4.1 廣播變量 564
19.4.2 累加器 565
19.5 剖析Spark作業(yè)運(yùn)行機(jī)制 565
19.5.1 作業(yè)提交 566
19.5.2 DAG的構(gòu)建 566
19.5.3 任務(wù)調(diào)度 569
19.5.4 任務(wù)執(zhí)行 570
19.6 執(zhí)行器和集群管理器 570
19.7 延伸閱讀 574
第20章 關(guān)于HBase 575
20.1 HBase基礎(chǔ) 575
20.2 概念 576
20.2.1 數(shù)據(jù)模型的
“旋風(fēng)之旅” 576
20.2.2 實(shí)現(xiàn) 578
20.3 安裝 581
20.4 客戶端 584
20.4.1 Java 584
20.4.2 MapReduce 588
20.4.3 REST和Thrift 589
20.5 創(chuàng)建在線查詢應(yīng)用 589
20.5.1 模式設(shè)計(jì) 590
20.5.2 加載數(shù)據(jù) 591
20.5.3 在線查詢 595
20.6 HBase和RDBMS的比較 598
20.6.1 成功的服務(wù) 599
20.6.2 HBase 600
20.7 Praxis 601
20.7.1 HDFS 601
20.7.2 用戶界面 602
20.7.3 度量 602
20.7.4 計(jì)數(shù)器 602
20.8 延伸閱讀 602
第21章 關(guān)于ZooKeeper 604
21.1 安裝和運(yùn)行ZooKeeper 605
21.2 示例 607
21.2.1 ZooKeeper中的
組成員關(guān)系 608
21.2.2 創(chuàng)建組 608
21.2.3 加入組 611
21.2.4 列出組成員 612
21.2.5 刪除組 614
21.3 ZooKeeper服務(wù) 615
21.3.1 數(shù)據(jù)模型 615
21.3.2 操作 618
21.3.3 實(shí)現(xiàn) 622
21.3.4 一致性 624
21.3.5 會(huì)話 626
21.3.6 狀態(tài) 628
21.4 使用ZooKeeper來構(gòu)建
應(yīng)用 629
21.4.1 配置服務(wù) 629
21.4.2 可復(fù)原的ZooKeeper
應(yīng)用 633
21.4.3 鎖服務(wù) 637
21.4.4 更多分布式數(shù)據(jù)
結(jié)構(gòu)和協(xié)議 639
21.5 生產(chǎn)環(huán)境中的ZooKeeper 640
21.5.1 可恢復(fù)性和性能 641
21.5.2 配置 642
21.6 延伸閱讀 643
第22章 醫(yī)療公司塞納(Cerner)
的可聚合數(shù)據(jù) 647
22.1 從多CPU到語義集成 647
22.2 進(jìn)入Apache Crunch 648
22.3 建立全貌 649
22.4 集成健康醫(yī)療數(shù)據(jù) 651
22.5 框架之上的可組合性 654
22.6 下一步 655
第23章 生物數(shù)據(jù)科學(xué):
用軟件拯救生命 657
23.1 DNA的結(jié)構(gòu) 659
23.2 遺傳密碼:將DNA字符
轉(zhuǎn)譯為蛋白質(zhì) 660
22.3 將DNA想象成源代碼 661
23.4 人類基因組計(jì)劃和參考
基因組 663
22.5 DNA測序和比對 664
23.6 ADAM,一個(gè)可擴(kuò)展的
基因組分析平臺(tái) 666
23.7 使用Avro接口描述語言進(jìn)行
自然語言編程 666
23.8 使用Parquet進(jìn)行面向列的
存取 668
23.9 一個(gè)簡單例子:用Spark和
ADAM做k-mer計(jì)數(shù) 669
23.10 從個(gè)性化廣告到個(gè)性化
醫(yī)療 672
23.11 聯(lián)系我們 673
第24章 開源項(xiàng)目Cascading 674
24.1 字段、元組和管道 675
24.2 操作 678
24.3 Taps,Schemes和Flows 680
24.4 Cascading實(shí)踐應(yīng)用 681
24.5 靈活性 684
24.6 ShareThis中的Hadoop和
Cascading 685
24.7 總結(jié) 689
附錄A 安裝Apache Hadoop 691
附錄B 關(guān)于CDH 697
附錄C 準(zhǔn)備NCDC氣象數(shù)據(jù) 699
附錄D 新版和舊版Java
MapReduce API 702