第1章 初识Hadoop 1
1.1 数据!数据 1
1.2 数据的存储和分析 3
1.3 相较于其他系统 4
1.3.1 关系型数据库管理系统 5
1.3.2 网格计算 6
1.3.3 志愿计算 8
1.4 Hadoop发展简史 9
1.5 Apache Hadoop项目 12
第2章 MapReduce简介 15
2.1 一个气象数据集 15
2.2 使用Unix Tools来分析数据 17
2.3 使用Hadoop进行数据分析 19
2.3.1 map和reduce 19
2.3.2 Java MapReduce 20
2.4 分布化 30
2.4.1 数据流 30
2.4.2 具体定义一个combiner 34
2.4.3 运行分布式MapReduce作业 35
2.5 Hadoop流 35
2.5.1 Ruby语言 36
2.5.2 Python 38
2.6 Hadoop管道 40
第3章 Hadoop分布式文件系统 44
3.1 HDFS的设计 44
3.2 HDFS的念 45
3.2.1 块 45
3.2.2 名称节点与数据节点 47
3.3 命令行接口 48
3.4 Hadoop文件系统 50
3.5 Java接口 54
3.5.1 从Hadoop URL中读取数据 54
3.5.2 使用FileSystem API读取数据 56
3.5.3 写入数据 59
3.5.4 目录 62
3.5.5 查询文件系统 62
3.5.6 删除数据 67
3.6 数据流 68
3.6.1 文件读取剖析 68
3.6.2 文件写入剖析 71
3.6.3 一致模型 73
3.7 通过distcp进行并行复制 75
3.8 Hadoop归档文件 77
3.8.1 使用Hadoop Archives 77
3.8.2 不足 79
第4章 Hadoop的I/O 80
4.1 数据完整性 80
4.1.1 HDFS的数据完整性 81
4.1.2 本地文件系统 82
4.1.3 ChecksumFileSystem 82
4.2 压缩 83
4.2.1 编码/解码器 84
4.2.2 压缩和输入分割 89
4.2.3 在MapReduce中使用压缩 90
4.3 序列化 92
4.3.1 Writable接口 93
4.3.2 Writeable类 96
4.3.3 实现自定义的Writable 104
4.3.4 序列化框架 109
4.4 基于文件的数据结构 111
4.4.1 SequenceFile类 112
4.4.2 MapFile 120
第5章 MapReduce应用开发 125
5.1 API的配置 126
5.1.1 合并资源 127
5.1.2 各种扩展形式 128
5.2 配置开发环境 128
5.2.1 配置的管理 129
5.2.2 GenericOptionsParser,Tool和ToolRunner 131
5.3 编写单元测试 134
5.3.1 Mapper 135
5.3.2 reducer 137
5.4 本地运行测试数据 138
5.4.1 在本地作业运行器上运行作业 139
5.4.2 测试驱动程序 142
5.5 在集群上运行 144
5.5.1 打包 144
5.5.2 启动作业 144
5.5.3 MapReduce网络用户界面 146
5.5.4 获取结果 150
5.5.5 调试作业 151
5.5.6 使用远程调试器 157
5.6 作业调优 159
5.7 MapReduce的工作流 162
5.7.1 将问题分解成MapReduce作业 163
5.7.2 运行独立的作业 164
第6章 MapReduce的工作原理 166
6.1 运行MapReduce作业 166
6.1.1 提交作业 166
6.1.2 作业的初始化 168
6.1.3 任务的分配 168
6.1.4 任务的执行 169
6.1.5 进度和状态的更新 170
6.1.6 作业的完成 171
6.2 失败 172
6.2.1 任务失败 172
6.2.2 tasktracker失败 174
6.2.3 jobtracker失败 174
6.3 作业的调度 174
6.4 shuffle和排序 175
6.4.1 map端 176
6.4.2 reduce端 177
6.4.3 配置的调整 178
6.5 任务的执行 181
6.5.1 推测式执行 181
6.5.2 任务JVM重用 183
6.5.3 跳过坏记录 184
6.5.4 任务执行环境 185
第7章 MapReduce的类型与格式 188
7.1 MapReduce类型 188
7.2 输入格式 198
7.2.1 输入分片与记录 198
7.2.2 文本输入 210
7.2.3 二进制输入 214
7.2.4 多种输入 215
7.2.5 数据库格式的输入/输出 216
7.3 输出格式 217
7.3.1 文本输出 217
7.3.2 二进制输出 218
7.3.3 多个输出 218
7.3.4 延迟输出 226
7.3.5 数据库输出 226
第8章 MapReduce特性 227
8.1 计数器 227
8.1.1 内置计数器 227
8.1.2 用户自定义Java计数器 230
8.1.3 用户自定义流计数器 235
8.2 排序 235
8.2.1 准备 235
8.2.2 部分排序 237
8.2.3 全局排序 242
8.2.4 二次排序 246
8.3 联接 252
8.3.1 map端联接 253
8.3.2 reduce端联接 254
8.4 次要数据的分布 258
8.4.1 使用作业配置 258
8.4.2 分布式缓存 258
8.5 MapReduce的类库 263
第9章 Hadoop集群的安装 264
9.1 集群说明 264
9.2 集群的建立和安装 268
9.2.1 安装Java 268
9.2.2 创建Hadoop用户 269
9.2.3 安装Hadoop 269
9.2.4 测试安装 270
9.3 SSH配置 270
9.4 Hadoop配置 271
9.4.1 配置管理 271
9.4.2 环境设置 274
9.4.3 重要的Hadoop后台程序属性 278
9.4.4 Hadoop后台程序地址和端口 283
9.4.5 其他Hadoop属性 284
9.5 安装之后 286
9.6 Hadoop集群基准测试 286
9.6.1 Hadoop基准测试 287
9.6.2 用户作业 290
9.7 云计算中的Hadoop 290
第10章 Hadoop的管理 293
10.1 HDFS 293
10.1.1 持久化的数据结构 293
10.1.2 安全模式 298
10.1.3 审计日志 300
10.1.4 工具 300
10.2 监控 306
10.2.1 日志 306
10.2.2 度量 307
10.2.3 Java管理扩展 310
10.3 维护 313
10.3.1 例行管理程序 313
10.3.2 委托节点和撤消节点 314
10.3.3 升级 317
第11章 Pig简介 321
11.1 安装和运行Pig 322
11.1.1 执行类型 322
11.1.2 运行Pig程序 324
11.1.3 Grunt 324
11.1.4 Pig Latin编辑器 325
11.2 实例 325
11.3 与数据库比较 329
11.4 Pig Latin 330
11.4.1 结构 330
11.4.2 语句 331
11.4.3 表达式 334
11.4.4 类型 335
11.4.5 模式 337
11.4.6 函数 341
11.5 用户定义函数 343
11.5.1 过滤UDF 343
11.5.2 求值UDF 347
11.5.3 加载UDF 348
11.6 数据处理操作符 353
11.6.1 加载和存储数据 353
11.6.2 过滤数据 353
11.6.3 数据的分组和联接 356
11.6.4 数据的排序 361
11.6.5 数据的合并和分割 362
11.7 Pig实践提示与技巧 363
11.7.1 并行 363
11.7.2 参数替换 364
第12章 Hbase简介 366
12.1 HBase基础 366
12.2 概念 367
12.2.1 数据模型速览 367
12.2.2 实现 368
12.3 安装 371
12.4 客户端 374
12.4.1 Java 374
12.4.2 REST和thrift 376
12.5 示例 377
12.5.1 架构 378
12.5.2 加载数据 379
12.5.3 Web查询 382
12.6 HBase与RDBMS的比较 385
12.6.1 成功的服务 386
12.6.2 HBase 387
12.6.3 用例:streamy.com的Hbase 388
12.7 实践 390
12.7.1 版本 390
12.7.2 Hbase和HDFS的爱与恨 390
12.7.3 用户界面 392
12.7.4 度量 392
12.7.5 架构设计 392
第13章 ZooKeeper简介 394
13.1 ZooKeeper的安装和运行 395
13.2 范例 396
13.2.1 ZooKeeper中的组成员制 397
13.2.2 创建组 397
13.2.3 加入组 400
13.2.4 列出组成员 401
13.2.5 删除一个组 404
13.3 ZooKeeper服务 405
13.3.1 数据模型 405
13.3.2 操作 407
13.3.3 执行 411
13.3.4 一致性 412
13.3.5 会话 414
13.3.6 状态 416
13.4 使用ZooKeeper建立应用程序 417
13.4.1 配置服务 417
13.4.2 可恢复的ZooKeeper应用 421
13.4.3 锁服务 425
13.4.4 更多分布式数据结构和协议 427
13.5 工业界中的ZooKeeper 428
13.5.1 恢复力及性能 428
13.5.2 配置 429
第14章 案例研究 431
14.1 Hadoop在Last.fm的应用 431
14.1.1 Last.fm:社会音乐革命 431
14.1.2 使用Hadoop生成排行榜 432
14.1.3 单曲统计程序 433
14.1.4 小结 440
14.2 Hadoop和Hive在Facebook的应用 441
14.2.1 简介 441
14.2.2 Hadoop在Facebook的应用 441
14.2.3 虚拟案例研究 444
14.2.4 Hive 446
14.2.5 存在的问题及未来的工作 450
14.3 Hadoop在Nutch搜索引擎 451
14.3.1 背景 451
14.3.2 数据结构 453
14.3.3 Nutch中Hadoop数据处理精选实例 455
14.3.4 小结 465
14.4 Hadoop用于Rackspace的日志处理 466
14.4.1 需求/存在的问题 466
14.4.2 简史 467
14.4.3 选择Hadoop 467
14.4.4 收集和存储 467
14.4.5 日志的MapReduce 468
14.5 Cascading项目 474
14.5.1 字段、元组和管道 475
14.5.2 操作 477
14.5.3 Tap、Sheme和Flow 479
14.5.4 Cascading实践 480
14.5.5 灵活性 483
14.5.6 Hadoop和Cascading在ShareThis的应用 484
14.5.7 小结 487
14.6 Apache Hadoop的1 TB排序 488
附录A Apache Hadoop的安装 491
附录B Cloudera的Hadoop分发包 497
附录C 预备NCDC气象资料 502