第1章 Hadoop简介 1
1.1 什么是Hadoop 2
1.1.1 Hadoop概述 2
1.1.2 Hadoop的历史 2
1.1.3 Hadoop的功能与作用 2
1.1.4 Hadoop的优势 3
1.1.5 Hadoop应用现状和发展趋势 3
1.2 Hadoop项目及其结构 3
1.3 Hadoop体系结构 6
1.4 Hadoop与分布式开发 7
1.5 Hadoop计算模型——MapReduce 10
1.6 Hadoop数据管理 10
1.6.1 HDFS的数据管理 10
1.6.2 HBase的数据管理 12
1.6.3 Hive的数据管理 13
1.7 Hadoop集群安全策略 15
1.8 本章小结 17
第2章 Hadoop的安装与配置 19
2.1 在Linux上安装与配置Hadoop 20
2.1.1 安装JDK 1.6 20
2.1.2 配置SSH免密码登录 21
2.1.3 安装并运行Hadoop 22
2.2 在Mac OSX上安装与配置Hadoop 24
2.2.1 安装Homebrew 24
2.2.2 使用Homebrew安装Hadoop 25
2.2.3 配置SSH和使用Hadoop 25
2.3 在Windows上安装与配置Hadoop 25
2.3.1 安装JDK 1.6 或更高版本 25
2.3.2 安装Cygwin 25
2.3.3 配置环境变量 26
2.3.4 安装sshd服务 26
2.3.5 启动sshd服务 26
2.3.6 配置SSH免密码登录 26
2.3.7 安装并运行Hadoop 26
2.4 安装和配置Hadoop集群 27
2.4.1 网络拓扑 27
2.4.2 定义集群拓扑 27
2.4.3 建立和安装Cluster 28
2.5 日志分析及几个小技巧 34
2.6 本章小结 35
第3章 MapReduce计算模型 36
3.1 为什么要用MapReduce 37
3.2 MapReduce计算模型 38
3.2.1 MapReduce Job 38
3.2.2 Hadoop中的Hello World程序 38
3.2.3 MapReduce的数据流和控制流 46
3.3 MapReduce任务的优化 47
3.4 Hadoop流 49
3.4.1 Hadoop流的工作原理 50
3.4.2 Hadoop流的命令 51
3.4.3 两个例子 52
3.5 Hadoop Pipes 54
3.6 本章小结 56
第4章 开发MapReduce应用程序 57
4.1 系统参数的配置 58
4.2 配置开发环境 60
4.3 编写MapReduce程序 60
4.3.1 Map处理 60
4.3.2 Reduce处理 61
4.4 本地测试 62
4.5 运行MapReduce程序 62
4.5.1 打包 64
4.5.2 在本地模式下运行 64
4.5.3 在集群上运行 64
4.6 网络用户界面 65
4.6.1 JobTracker页面 65
4.6.2 工作页面 65
4.6.3 返回结果 66
4.6.4 任务页面 67
4.6.5 任务细节 页面 67
4.7 性能调优 68
4.7.1 输入采用大文件 68
4.7.2 压缩文件 68
4.7.3 过滤数据 69
4.7.4 修改作业属性 71
4.8 MapReduce工作流 72
4.8.1 复杂的Map和Reduce函数 72
4.8.2 MapReduce Job中全局共享数据 74
4.8.3 链接MapReduce Job 75
4.9 本章小结 77
第5章 MapReduce应用案例 79
5.1 单词计数 80
5.1.1 实例描述 80
5.1.2 设计思路 80
5.1.3 程序代码 81
5.1.4 代码解读 82
5.1.5 程序执行 83
5.1.6 代码结果 83
5.1.7 代码数据流 84
5.2 数据去重 85
5.2.1 实例描述 85
5.2.2 设计思路 86
5.2.3 程序代码 86
5.3 排序 87
5.3.1 实例描述 87
5.3.2 设计思路 88
5.3.3 程序代码 89
5.4 单表关联 91
5.4.1 实例描述 91
5.4.2 设计思路 92
5.4.3 程序代码 92
5.5 多表关联 95
5.5.1 实例描述 95
5.5.2 设计思路 96
5.5.3 程序代码 96
5.6 本章小结 98
第6章 MapReduce工作机制 99
6.1 MapReduce作业的执行流程 100
6.1.1 MapReduce任务执行总流程 100
6.1.2 提交作业 101
6.1.3 初始化作业 103
6.1.4 分配任务 104
6.1.5 执行任务 106
6.1.6 更新任务执行进度和状态 107
6.1.7 完成作业 108
6.2 错误处理机制 108
6.2.1 硬件故障 109
6.2.2 任务失败 109
6.3 作业调度机制 110
6.4 Shuffle和排序 111
6.4.1 Map端 111
6.4.2 Reduce端 113
6.4.3 shuffle过程的优化 114
6.5 任务执行 114
6.5.1 推测式执行 114
6.5.2 任务JVM重用 115
6.5.3 跳过坏记录 115
6.5.4 任务执行环境 116
6.6 本章小结 117
第7章 Hadoop I/O操作 118
7.1 I/O操作中的数据检查 119
7.2 数据的压缩 126
7.2.1 Hadoop对压缩工具的选择 126
7.2.2 压缩分割和输入分割 127
7.2.3 在MapReduce程序中使用压缩 127
7.3 数据的I/O中序列化操作 128
7.3.1 Writable类 128
7.3.2 实现自己的Hadoop数据类型 137
7.4 针对Mapreduce的文件类 139
7.4.1 SequenceFile类 139
7.4.2 MapFile类 144
7.4.3 ArrayFile、SetFile和BloomMapFile 146
7.5 本章小结 148
第8章 下一代MapReduce:YARN 149
8.1 MapReduce V2设计需求 150
8.2 MapReduce V2主要思想和架构 151
8.3 MapReduce V2设计细节 153
8.4 MapReduce V2优势 156
8.5 本章小结 156
第9章 HDFS详解 157
9.1 Hadoop的文件系统 158
9.2 HDFS简介 160
9.3 HDFS体系结构 161
9.3.1 HDFS的相关概念 161
9.3.2 HDFS的体系结构 162
9.4 HDFS的基本操作 164
9.4.1 HDFS的命令行操作 164
9.4.2 HDFS的Web界面 165
9.5 HDFS常用Java API详解 166
9.5.1 使用Hadoop URL读取数据 166
9.5.2 使用FileSystem API读取数据 167
9.5.3 创建目录 169
9.5.4 写数据 169
9.5.5 删除数据 171
9.5.6 文件系统查询 171
9.6 HDFS中的读写数据流 175
9.6.1 文件的读取 175
9.6.2 文件的写入 176
9.6.3 一致性模型 178
9.7 HDFS命令详解 179
9.7.1 通过distcp进行并行复制 179
9.7.2 HDFS的平衡 180
9.7.3 使用Hadoop归档文件 180
9.7.4 其他命令 183
9.8 WebHDFS 186
9.8.1 WebHDFS的配置 186
9.8.2 WebHDFS命令 186
9.9 本章小结 190
第10章 Hadoop的管理 191
10.1 HDFS文件结构 192
10.2 Hadoop的状态监视和管理工具 196
10.2.1 审计日志 196
10.2.2 监控日志 196
10.2.3 Metrics 197
10.2.4 Java管理扩展 199
10.2.5 Ganglia 200
10.2.6 Hadoop管理命令 202
10.3 Hadoop集群的维护 206
10.3.1 安全模式 206
10.3.2 Hadoop的备份 207
10.3.3 Hadoop的节 点管理 208
10.3.4 系统升级 210
10.4 本章小结 212
第11章 Hive详解 213
11.1 Hive简介 214
11.1.1 Hive的数据存储 214
11.1.2 Hive的元数据存储 216
11.2 Hive的基本操作 216
11.2.1 在集群上安装Hive 216
11.2.2 配置MySQL存储Hive元数据 218
11.2.3 配置Hive 220
11.3 Hive QL详解 221
11.3.1 数据定义(DDL)操作 221
11.3.2 数据操作(DML) 231
11.3.3 SQL操作 233
11.3.4 Hive QL使用实例 235
11.4 Hive网络(Web UI)接口 237
11.4.1 Hive网络接口配置 237
11.4.2 Hive网络接口操作实例 238
11.5 Hive的JDBC接口 241
11.5.1 Eclipse环境配置 241
11.5.2 程序实例 241
11.6 Hive的优化 244
11.7 本章小结 246
第12章 HBase详解 247
12.1 HBase简介 248
12.2 HBase的基本操作 249
12.2.1 HBase的安装 249
12.2.2 运行HBase 253
12.2.3 HBase Shell 255
12.2.4 HBase配置 258
12.3 HBase体系结构 260
12.3.1 HRegion 260
12.3.2 HRegion服务器 261
12.3.3 HBase Master服务器 262
12.3.4 ROOT表和META表 262
12.3.5 ZooKeeper 263
12.4 HBase数据模型 263
12.4.1 数据模型 263
12.4.2 概念视图 264
12.4.3 物理视图 264
12.5 HBase与RDBMS 265
12.6 HBase与HDFS 266
12.7 HBase客户端 266
12.8 Java API 267
12.9 HBase编程 273
12.9.1 使用Eclipse开发HBase应用程序 273
12.9.2 HBase编程 275
12.9.3 HBase与MapReduce 278
12.10 模式设计 280
12.10.1 模式设计应遵循的原则 280
12.10.2 学生表 281
12.10.3 事件表 282
12.11 本章小结 283
第13章 Mahout详解 284
13.1 Mahout简介 285
13.2 Mahout的安装和配置 285
13.3 Mahout API简介 288
13.4 Mahout中的频繁模式挖掘 290
13.4.1 什么是频繁模式挖掘 290
13.4.2 Mahout中的频繁模式挖掘 290
13.5 Mahout中的聚类和分类 292
13.5.1 什么是聚类和分类 292
13.5.2 Mahout中的数据表示 293
13.5.3 将文本转化成向量 294
13.5.4 Mahout中的聚类、分类算法 295
13.5.5 算法应用实例 299
13.6 Mahout应用:建立一个推荐引擎 304
13.6.1 推荐引擎简介 304
13.6.2 使用Taste构建一个简单的推荐引擎 305
13.6.3 简单分布式系统下基于产品的推荐系统简介 307
13.7 本章小结 309
第14章 Pig详解 310
14.1 Pig简介 311
14.2 Pig的安装和配置 311
14.2.1 Pig的安装条件 311
14.2.2 Pig的下载、安装和配置 312
14.2.3 Pig运行模式 313
14.3 Pig Latin语言 315
14.3.1 Pig Latin语言简介 315
14.3.2 Pig Latin的使用 316
14.3.3 Pig Latin的数据类型 318
14.3.4 Pig Latin关键字 319
14.4 用户定义函数 323
14.4.1 编写用户定义函数 324
14.4.2 使用用户定义函数 325
14.5 Zebra简介 326
14.5.1 Zebra的安装 326
14.5.2 Zebra的使用简介 327
14.6 Pig实例 328
14.6.1 Local模式 328
14.6.2 MapReduce模式 330
14.7 Pig进阶 331
14.7.1 数据实例 331
14.7.2 Pig数据分析 332
14.8 本章小结 336
第15章 ZooKeeper详解 337
15.1 ZooKeeper简介 338
15.1.1 ZooKeeper的设计目标 338
15.1.2 数据模型和层次命名空间 339
15.1.3 ZooKeeper中的节 点和临时节 点 339
15.1.4 ZooKeeper的应用 340
15.2 ZooKeeper的安装和配置 340
15.2.1 安装ZooKeeper 340
15.2.2 配置ZooKeeper 346
15.2.3 运行ZooKeeper 348
15.3 ZooKeeper的简单操作 350
15.3.1 使用ZooKeeper命令的简单操作步骤 350
15.3.2 ZooKeeper API的简单使用 352
15.4 ZooKeeper的特性 355
15.4.1 ZooKeeper的数据模型 355
15.4.2 ZooKeeper会话及状态 356
15.4.3 ZooKeeper watches 357
15.4.4 ZooKeeper ACL 358
15.4.5 ZooKeeper的一致性保证 359
15.5 使用ZooKeeper进行Leader选举 359
15.6 ZooKeeper锁服务 360
15.6.1 ZooKeeper中的锁机制 360
15.6.2 ZooKeeper提供的一个写锁的实现 361
15.7 使用ZooKeeper创建应用程序 363
15.7.1 使用Eclipse开发ZooKeeper应用程序 363
15.7.2 应用程序实例 365
15.8 BooKeeper 369
15.9 本章小结 371
第16章 Avro详解 372
16.1 Avro介绍 373
16.1.1 模式声明 374
16.1.2 数据序列化 378
16.1.3 数据排列顺序 380
16.1.4 对象容器文件 381
16.1.5 协议声明 382
16.1.6 协议传输格式 383
16.1.7 模式解析 386
16.2 Avro的C/C++实现 387
16.3 Avro的Java实现 398
16.4 GenAvro(Avro IDL)语言 402
16.5 Avro SASL概述 406
16.6 本章小结 407
第17章 Chukwa详解 409
17.1 Chukwa简介 410
17.2 Chukwa架构 411
17.2.1 客户端及其数据模型 412
17.2.2 收集器 413
17.2.3 归档器和分离解析器 414
17.2.4 HICC 415
17.3 Chukwa的可靠性 415
17.4 Chukwa集群搭建 416
17.4.1 基本配置要求 416
17.4.2 Chukwa的安装 416
17.4.3 Chukwa的运行 419
17.5 Chukwa数据流的处理 424
17.6 Chukwa与其他监控系统比较 425
17.7 本章小结 426
本章参考资料 426
第18章 Hadoop的常用插件与开发 428
18.1 Hadoop Studio的介绍和使用 429
18.1.1 Hadoop Studio的介绍 429
18.1.2 Hadoop Studio的安装配置 430
18.1.3 Hadoop Studio的使用举例 430
18.2 Hadoop Eclipse的介绍和使用 436
18.2.1 Hadoop Eclipse的介绍 436
18.2.2 Hadoop Eclipse的安装配置 437
18.2.3 Hadoop Eclipse的使用举例 438
18.3 Hadoop Streaming的介绍和使用 440
18.3.1 Hadoop Streaming的介绍 440
18.3.2 Hadoop Streaming的使用举例 444
18.3.3 使用Hadoop Streaming常见的问题 446
18.4 Hadoop Libhdfs的介绍和使用 448
18.4.1 Hadoop Libhdfs的介绍 448
18.4.2 Hadoop Libhdfs的安装配置 448
18.4.3 Hadoop Libhdfs API简介 448
18.4.4 Hadoop Libhdfs的使用举例 449
18.5 本章小结 450
第19章 企业应用实例 452
19.1 Hadoop在Yahoo!的应用 453
19.2 Hadoop在eBay的应用 455
19.3 Hadoop在百度的应用 457
19.4 即刻搜索中的Hadoop 460
19.4.1 即刻搜索简介 460
19.4.2 即刻Hadoop应用架构 460
19.4.3 即刻Hadoop应用分析 463
19.5 Facebook中的Hadoop和HBase 463
19.5.1 Facebook中的任务特点 464
19.5.2 MySQL VS Hadoop+HBase 466
19.5.3 Hadoop和HBase的实现 467
19.6 本章小结 472
本章参考资料 472
附录A 云计算在线检测平台 474
附录B Hadoop安装、运行与使用说明 484
附录C 使用DistributedCache的MapReduce程序 491
附录D 使用ChainMapper和ChainReducer的MapReduce程序 495