《Hadoop 权威指南 第4版》书籍介绍
《Hadoop 权威指南 第4版》目录
封面 1
书名 2
前言 10
目录 19
第Ⅰ部分 Hadoop基础知识
第1章 初识Hadoop 27
1.1 数据!数据! 27
1.2 数据的存储与分析 29
1.3 查询所有数据 30
1.4 不仅仅是批处理 31
1.5 相较于其他系统的优势 32
1.5.1 关系型数据库管理系统 32
1.5.2 网格计算 34
1.5.3 志愿计算 35
1.6 Apache Hadoop发展简史 36
1.7 本书包含的内容 40
第2章 关于MapReduce 43
2.1 气象数据集 43
2.2 使用Unix工具来分析数据 45
2.3 使用Hadoop来分析数据 46
2.3.1 map和reduce 47
2.3.2 Java MapReduce 48
2.4 横向扩展 55
2.4.1 数据流 55
2.4.2 biner函数 59
2.4.3 运行分布式的MapReduce作业 61
2.5 Hadoop Streaming 61
2.5.1 Ruby版本 62
2.5.2 Python版本 64
第3章 Hadoop分布式文件系统 66
3.1 HDFS的设计 66
3.2 HDFS的概念 68
3.2.1 数据块 68
3.2.2 namenode和datanode 69
3.2.3 块缓存 70
3.2.4 联邦HDFS 71
3.2.5 HDFS的高可用性 71
3.3 命令行接口 74
3.4 Hadoop文件系统 76
3.5 Java接口 80
3.5.1 从Hadoop URL读取数据 80
3.5.2 通过FileSystem API读取数据 82
3.5.3 写入数据 85
3.5.4 目录 87
3.5.5 查询文件系统 87
3.5.6 删除数据 92
3.6 数据流 92
3.6.1 剖析文件读取 92
3.6.2 剖析文件写入 95
3.6.3 一致模型 98
3.7 通过distcp并行复制 100
第4章 关于YARN 102
4.1 剖析YARN应用运行机制 103
4.1.1 资源请求 104
4.1.2 应用生命期 105
4.1.3 构建YARN应用 105
4.2 YARN与MapReduce 1相比 106
4.3 YARN中的调度 109
4.3.1 调度选项 109
4.3.2 容量调度器配置 111
4.3.3 公平调度器配置 113
4.3.5 延迟调度 117
4.3.5 主导资源公平性 118
4.4 延伸阅读 119
第5章 Hadoop的I/O操作 120
5.1 数据完整性 120
5.1.1 HDFS的数据完整性 121
5.1.2 LocalFileSystem 122
5.1.3 ChecksumFileSystem 122
5.2 压缩 123
5.2.1 codec 124
5.2.2 压缩和输入分片 129
5.2.3 在MapReduce中使用压缩 130
5.3 序列化 133
5.3.1 Writable接口 134
5.3.2 Writable类 136
5.3.3 实现定制的Writable集合 145
5.3.4 序列化框架 149
5.4 基于文件的数据结构 151
5.4.1 关于SequenceFile 151
5.4.2 关于MapFile 159
5.4.3 其他文件格式和面向列的格式 160
第Ⅱ部分 关于MapReduce
第6章 MapReduce应用开发 165
6.1 用于配置的API 166
6.1.1 资源合并 167
6.1.2 变量扩展 168
6.2 配置开发环境 168
6.2.1 管理配置 170
6.2.2 辅助类GenericOptionsParser,Tool和ToolRunner 173
6.3 用MRUnit来写单元测试 176
6.3.1 关于Mapper 176
6.3.2 关于Reducer 180
6.4 本地运行测试数据 180
6.4.1 在本地作业运行器上运行作业 180
6.4.2 测试驱动程序 182
6.5 在集群上运行 184
6.5.1 打包作业 184
6.5.2 启动作业 186
6.5.3 MapReduce的Web界面 189
6.5.4 获取结果 191
6.5.5 作业调试 192
6.5.6 Hadoop日志 195
6.5.7 远程调试 197
6.6 作业调优 198
6.7 MapReduce的工作流 200
6.7.1 将问题分解成MapReduce作业 201
6.7.2 关于JobControl 202
6.7.3 关于Apache Oozie 203
第7章 MapReduce的工作机制 208
7.1 剖析MapReduce作业运行机制 208
7.1.1 作业的提交 209
7.1.2 作业的初始化 210
7.1.3 任务的分配 211
7.1.4 任务的执行 212
7.1.5 进度和状态的更新 213
7.1.6 作业的完成 215
7.2 失败 215
7.2.1 任务运行失败 215
7.2.2 application master运行失败 217
7.2.3 节点管理器运行失败 217
7.2.4 资源管理器运行失败 218
7.3 shuffle和排序 219
7.3.1 map端 219
7.3.2 reduce端 221
7.3.3 配置调优 223
7.4 任务的执行 225
7.4.1 任务执行环境 225
7.4.2 推测执行 226
7.4.3 关于OutputCommitters 228
第8章 MapReduce的类型与格式 231
8.1 MapReduce的类型 231
8.1.1 默认的MapReduce作业 236
8.1.2 默认的Streaming作业 240
8.2 输入格式 242
8.2.1 输入分片与记录 242
8.2.2 文本输入 253
8.2.3 二进制输入 257
8.2.4 多个输入 258
8.2.5 数据库输入(和输出) 259
8.3 输出格式 260
8.3.1 文本输出 260
8.3.2 二进制输出 261
8.3.3 多个输出 261
8.3.4 延迟输出 266
8.3.5 数据库输出 266
第9章 MapReduce的特性 267
9.1 计数器 267
9.1.1 内置计数器 267
9.1.2 用户定义的Java计数器 272
9.1.3 用户定义的Streaming计数器 275
9.2 排序 276
9.2.1 准备 276
9.2.2 部分排序 277
9.2.3 全排序 279
9.2.4 辅助排序 283
9.3 连接 288
9.3.1 map端连接 290
9.3.2 reduce端连接 290
9.4 边数据分布 294
9.4.1 利用JobConf来配置作业 294
9.4.2 分布式缓存 294
9.5 MapReduce库类 300
第Ⅲ部分 Hadoop的操作
第10章 构建Hadoop集群 303
10.1 集群规范 304
10.1.1 集群规模 305
10.1.2 网络拓扑 306
10.2 集群的构建和安装 308
10.2.1 安装Java 308
10.2.2 创建Unix 用户账号 308
10.2.3 安装Hadoop 308
10.2.4 SSH配置 309
10.2.5 配置Hadoop 310
10.2.6 格式化HDFS 文件系统 310
10.2.7 启动和停止守护进程 310
10.2.8 创建用户目录 312
10.3 Hadoop配置 312
10.3.1 配置管理 313
10.3.2 环境设置 314
10.3.3 Hadoop守护进程的关键属性 317
10.3.4 Hadoop守护进程的地址和端口 324
10.3.5 Hadoop的其他属性 327
10.4 安全性 329
10.4.1 Kerberos和Hadoop 330
10.4.2 委托令牌 332
10.4.3 其他安全性改进 333
10.5 利用基准评测程序测试Hadoop集群 335
10.5.1 Hadoop基准评测程序 335
10.5.2 用户作业 337
第11章 管理Hadoop 338
11.1 HDFS 338
11.1.1 永久性数据结构 338
11.1.2 安全模式 344
11.1.3 日志审计 346
11.1.4 工具 346
11.2 监控 351
11.2.1 日志 351
11.2.2 度量和JMX(Java管理扩展) 352
11.3 维护 353
11.3.1 日常管理过程 353
11.3.2 委任和解除节点 355
11.3.3 升级 358
第Ⅳ部分 Hadoop相关开源项目
第12章 关于Avro 365
12.1 Avro数据类型和模式 366
12.2 内存中的序列化和反序列化特定API 371
12.3 Avro数据文件 373
12.4 互操作性 375
12.4.1 Python API 375
12.4.2 Avro工具集 376
12.5 模式解析 376
12.6 排列顺序 378
12.7 关于Avro MapReduce 380
12.8 使用Avro MapReduce进行排序 383
12.9 其他语言的Avro 386
第13章 关于Parquet 387
13.1 数据模型 388
13.2 Parquet文件格式 391
13.3 Parquet的配置 392
13.4 Parquet文件的读/写 393
13.4.1 Avro、Protocol Buffers和Thrift 395
13.4.2 投影模式和读取模式 397
13.5 Parquet MapReduce 398
第14章 关于Flume 401
14.1 安装Flume 402
14.2 示例 402
14.3 事务和可靠性 404
14.4 HDFS Sink 406
14.5 扇出 409
14.5.1 交付保证 410
14.5.2 复制和复用选择器 411
14.6 通过代理层分发 411
14.7 Sink组 415
14.8 Flume与应用程序的集成 419
14.9 组件编目 419
14.10 延伸阅读 421
第15章 关于Sqoop 422
15.1 获取Sqoop 422
15.2 Sqoop连接器 424
15.3 一个导入的例子 425
15.4 生成代码 428
15.5 深入了解数据库导入 429
15.5.1 导入控制 431
15.5.2 导入和一致性 432
15.5.3 增量导入 432
15.5.4 直接模式导入 432
15.6 使用导入的数据 433
15.7 导入大对象 436
15.8 执行导出 438
15.9 深入了解导出功能 440
15.9.1 导出与事务 441
15.9.2 导出和SequenceFile 442
15.10 延伸阅读 443
第16章 关于Pig 444
16.1 安装与运行Pig 445
16.1.1 执行类型 446
16.1.2 运行Pig程序 447
16.1.3 Grunt 448
16.1.4 Pig Latin编辑器 448
16.2 示例 449
16.3 与数据库进行比较 452
16.4 PigLatin 453
16.4.1 结构 454
16.4.2 语句 455
16.4.3 表达式 460
16.4.4 类型 461
16.4.5 模式 462
16.4.6 函数 467
16.4.7 宏 469
16.5 用户自定义函数 470
16.5.1 过滤UDF 471
16.5.2 计算UDF 474
16.5.3 加载UDF 476
16.6 数据处理操作 479
16.6.1 数据的加载和存储 479
16.6.2 数据的过滤 479
16.6.3 数据的分组与连接 482
16.6.4 数据的排序 487
16.6.5 数据的组合和切分 489
16.7 Pig实战 489
16.7.1 并行处理 489
16.7.2 匿名关系 490
16.7.3 参数代换 491
16.8 延伸阅读 492
第17章 关于Hive 493
17.1 安装Hive 494
Hive的shell环境 495
17.2 示例 496
17.3 运行Hive 497
17.3.1 配置Hive 497
17.3.2 Hive服务 500
17.3.3 Metastore 502
17.4 Hive与传统数据库相比 504
17.4.1 读时模式vs.写时模式 504
17.4.2 更新、事务和索引 505
17.4.3 其他SQL—on—Hadoop技术 506
17.5 HiveQL 507
17.5.1 数据类型 508
17.5.2 操作与函数 511
17.6 表 512
17.6.1 托管表和外部表 512
17.6.2 分区和桶 514
17.6.3 存储格式 518
17.6.4 导入数据 522
17.6.5 表的修改 524
17.6.6 表的丢弃 525
17.7 查询数据 525
17.7.1 排序和聚集 525
17.7.2 MapReduce脚本 526
17.7.3 连接 527
17.7.4 子查询 530
17.7.5 视图 531
17.8 用户定义函数 532
17.8.1 写UDF 534
17.8.2 写UDAF 536
17.9 延伸阅读 540
第18章 关于Crunch 541
18.1 示例 542
18.2 Crunch核心API 545
18.2.1 基本操作 546
18.2.2 类型 551
18.2.3 源和目标 554
18.2.4 函数 556
18.2.5 物化 559
18.3 管线执行 561
18.3.1 运行管线 562
18.3.2 停止管线 563
18.3.3 查看Crunch计划 564
18.3.4 迭代算法 567
18.3.5 给管线设置检查点 568
18.4 Crunch库 569
18.5 延伸阅读 571
第19章 关于Spark 572
19.1 安装Spark 573
19.2 示例 573
19.2.1 Spark应用、作业、阶段和任务 575
19.2.2 Scala独立应用 576
19.2.3 Java示例 577
19.2.4 Python示例 578
19.3 弹性分布式数据集 579
19.3.1 创建 579
19.3.2 转换和动作 581
19.3.3 持久化 585
19.3.4 序列化 587
19.4 共享变量 588
19.4.1 广播变量 588
19.4.2 累加器 589
19.5 剖析Spark作业运行机制 589
19.5.1 作业提交 590
19.5.2 DAG的构建 590
19.5.3 任务调度 593
19.5.4 任务执行 594
19.6 执行器和集群管理器 594
19.7 延伸阅读 598
第20章 关于HBase 599
20.1 HBase基础 599
20.2 概念 600
20.2.1 数据模型的“旋风之旅” 600
20.2.2 实现 602
20.3 安装 605
20.4 客户端 608
20.4.1 Java 608
20.4.2 MapReduce 612
20.4.3 REST和Thrift 613
20.5 创建在线查询应用 613
20.5.1 模式设计 614
20.5.2 加载数据 615
20.5.3 在线查询 619
20.6 HBase和RDBMS的比较 622
20.6.1 成功的服务 623
20.6.2 HBase 624
20.7 Praxis 625
20.7.1 HDFS 625
20.7.2 用户界面 626
20.7.3 度量 626
20.7.4 计数器 626
20.8 延伸阅读 626
第21章 关于ZooKeeper 628
21.1 安装和运行ZooKeeper 629
21.2 示例 631
21.2.1 ZooKeeper中的组成员关系 632
21.2.2 创建组 632
21.2.3 加入组 635
21.2.4 列出组成员 636
21.2.5 删除组 638
21.3 ZooKeeper服务 639
21.3.1 数据模型 639
21.3.2 操作 642
21.3.3 实现 646
21.3.4 一致性 648
21.3.5 会话 650
21.3.6 状态 652
21.4 使用ZooKeeper来构建应用 653
21.4.1 配置服务 653
21.4.2 可复原的ZooKeeper应用 657
21.4.3 锁服务 661
21.4.4 更多分布式数据结构和协议 663
21.5 生产环境中的ZooKeeper 664
21.5.1 可恢复性和性能 665
21.5.2 配置 666
21.6 延伸阅读 667
第Ⅴ部分 案例学习
第22章 医疗公司塞纳(Cerner)的可聚合数据 671
22.1 从多CPU到语义集成 671
22.2 进入Apache Crunch 672
22.3 建立全貌 673
22.4 集成健康医疗数据 675
22.5 框架之上的可组合性 678
22.6 下一步 679
第23章 生物数据科学:用软件拯救生命 681
23.1 DNA的结构 683
23.2 遗传密码:将DNA字符转译为蛋白质 684
22.3 将DNA想象成源代码 685
23.4 人类基因组计划和参考基因组 687
22.5 DNA测序和比对 688
23.6 ADAM,一个可扩展的基因组分析平台 690
23.7 使用Avro接口描述语言进行自然语言编程 690
23.8 使用Parquet进行面向列的存取 692
23.9 一个简单例子:用Spark和ADAM做k—mer计数 693
23.10 从个性化广告到个性化医疗 696
23.11 联系我们 697
第24章 开源项目Cascading 698
24.1 字段、元组和管道 699
24.2 操作 702
24.3 Taps,Schemes和Flows 704
24.4 Cascading实践应用 705
24.5 灵活性 708
24.6 ShareThis中的Hadoop和Cascading 709
24.7 总结 713
附录A 安装Apache Hadoop 715
附录B 关于CDH 721
附录C 准备NCDC气象数据 723
附录D 新版和旧版JavaMapReduce API 726