第1篇 Hadoop技术篇 2
第1章 初识Hadoop 2
1.1 Hadoop简介 2
1.1.1 Hadoop的起源 2
1.1.2 什么是Hadoop 3
1.1.3 Hadoop的核心技术是Google核心技术的开源实现 4
1.1.4 Hadoop的功能与优点 5
1.1.5 Hadoop的应用现状和发展趋势 6
1.2 Hadoop的体系结构 11
1.2.1 HDFS的体系结构 12
1.2.2 MapReduce的体系结构 19
1.3 Hadoop与分布式开发 21
1.4 Hadoop的数据管理 23
1.4.1 HDFS的数据管理 23
1.4.2 HBase的数据管理 23
1.4.3 Hive的数据管理 24
1.5 思考与总结 25
第2章 Hadoop的安装和配置 27
2.1 在Windows下安装与配置Hadoop 27
2.1.1 JDK的安装 27
2.1.2 Cygwin的安装 30
2.1.3 Hadoop的安装 36
2.2 在Linux下安装与配置Hadoop 38
2.2.1 Ubuntu的安装 38
2.2.2 JDK的安装 41
2.2.3 Hadoop的安装 41
2.3 Hadoop的执行实例 43
2.3.1 运行Hadoop 44
2.3.2 运行wordcount.java程序 44
2.4 Hadoop Eclipse简介和使用 45
2.4.1 Eclipse插件介绍 45
2.4.2 Eclipse插件开发配置 45
2.4.3 在Eclipse下运行WordCount程序 49
2.5 Hadoop的集群和优化 56
2.5.1 Hadoop的性能优化 57
2.5.2 Hadoop配置机架感知信息 58
2.6 思考与总结 59
第3章 HDFS海量存储 60
3.1 开源的GFS——HDFS 60
3.1.1 HDFS简介 60
3.1.2 HDFS的体系结构 63
3.1.3 HDFS的保障可靠性措施 64
3.2 HDFS的常用操作 67
3.2.1 HDFS下的文件操作 67
3.2.2 管理与更新 74
3.2.3 HDFS API详解 76
3.2.4 HDFS的读/写数据流 88
3.3 用HDFS存储海量的视频数据 91
3.3.1 场景分析 91
3.3.2 设计实现 91
3.4 思考与总结 93
第4章 初识MapReduce 94
4.1 MapReduce简介 94
4.1.1 MapReduce要解决什么问题 94
4.1.2 MapReduce的理论基础 95
4.1.3 MapReduce的编程模式 97
4.2 MapReduce的集群行为 98
4.3 Map/Reduce框架 100
4.4 样例分析:单词计数 100
4.4.1 WordCount实例的运行过程 100
4.4.2 WordCount的源码分析和程序处理过程 103
4.4.3 MapReduce常用类及其接口 106
4.5 实例:倒排索引 109
4.5.1 倒排索引的分析和设计 109
4.5.2 倒排索引完整源码 112
4.5.3 运行代码结果 116
4.6 MapReduce在日志分析中数据去重案例 117
4.6.1 什么是数据去重 117
4.6.2 设计思路 118
4.6.3 程序代码 118
4.6.4 代码运行结果 120
4.7 数据排序实例 122
4.7.1 实例描述 122
4.7.2 设计思路 123
4.7.3 程序代码 123
4.8 思考与总结 126
第5章 分布式开源数据库HBase 127
5.1 HBase简介 127
5.1.1 HBase逻辑视图 127
5.1.2 HBase物理存储 129
5.1.3 子表Region服务器 130
5.1.4 Hmaster主服务器 132
5.1.5 元数据表 132
5.2 HBase的安装配置 133
5.2.1 HBase单机模式 133
5.2.2 HBase伪分布模式 135
5.2.3 HBase完全分布模式 136
5.3 学生成绩表实例 140
5.3.1 Shell的基本操作 141
5.3.2 代码实现 143
5.3.3 关于中文的处理 145
5.3.4 常用HBase的Shell操作 149
5.4 思考与总结 153
第6章 MapReduce进阶 154
6.1 API的配置 154
6.1.1 一个简单的配置文件 155
6.1.2 合并多个源文件 156
6.1.3 可变的扩展 157
6.2 配置开发环境 157
6.2.1 配置文件设置 157
6.2.2 设置用户标识 159
6.3 复合键值对的使用 159
6.3.1 小的键值对如何合并成大的键值对 159
6.3.2 巧用复合键让系统完成排序 160
6.4 用户定制数据类型 164
6.4.1 内置数据类型 164
6.4.2 用户自定义数据类型 164
6.5 用户定制输入/输出格式 166
6.5.1 内置数据的输入格式 167
6.5.2 用户定制数据输入格式与RecordReader 168
6.5.3 Hadoop内置的数据输出格式 172
6.5.4 Hadoop内置的数据输出格式与RecordWriter 172
6.6 用户定制Partitioner和Combiner 173
6.7 组合式的MapReduce作业 176
6.7.1 MapReduce作业运行机制 176
6.7.2 组合式MapReduce计算作业 178
6.8 DataJoin链接多数据源 183
6.9 思考与总结 187
第7章 Hive数据仓库 188
7.1 Hive简介 188
7.2 Hive安装与配置 189
7.3 Hive的服务 191
7.3.1 Hive shell 191
7.3.2 JDBC/ODBC 192
7.3.3 Thrift服务 192
7.3.4 Web接口 193
7.3.5 元数据服务 193
7.4 HiveQL查询语言 193
7.5 Hive实例 202
7.5.1 UDF编程实例 202
7.5.2 UDAF编程实例 204
7.5.3 Hive的日志数据统计实战 206
7.6 思考与总结 211
第8章 Pig开发应用 212
8.1 Pig简介 212
8.2 Pig的安装与配置 213
8.3 Pig的使用 215
8.3.1 Pig的MapReduce模式 215
8.3.2 Pig的运行方式 216
8.4 通过Grunt学习Pig Latin 219
8.4.1 Pig的数据模型 220
8.4.2 运算符 221
8.4.3 常用操作 222
8.4.4 各种SQL在Pig中的实现 229
8.4.5 Pig Latin实现 233
8.5 Pig使用的案例 235
8.6 思考与总结 235
第9章 Chukwa数据收集系统 236
9.1 Chukwa简介 236
9.1.1 Chukwa是什么 236
9.1.2 Chukwa主要解决什么问题 240
9.2 Chukwa的安装配置 240
9.2.1 Chukwa的安装 240
9.2.2 Chukwa的配置 242
9.2.3 Chukwa的启动 245
9.3 Chukwa的基本命令 248
9.3.1 Chukwa端的命令 248
9.3.2 Agent端的命令 249
9.4 Chukwa在数据收集处理方面的运用 251
9.4.1 数据生成 251
9.4.2 数据收集 251
9.4.3 数据处理 252
9.4.4 数据析取 252
9.4.5 数据稀释 253
9.4.6 数据显示 253
9.5 思考与总结 253
第10章 ZooKeeper开发应用 254
10.1 ZooKeeper简介 254
10.1.1 ZooKeeper的设计目标 254
10.1.2 ZooKeeper主要解决什么问题 256
10.1.3 ZooKeeper的基本概念和工作原理 257
10.2 ZooKeeper的安装配置 260
10.2.1 单机模式 261
10.2.2 启动并测试ZooKeeper 262
10.2.3 集群模式 264
10.3 ZooKeeper提供的接口 267
10.4 ZooKeeper事件 270
10.5 ZooKeeper实例 271
10.5.1 实例1:一个简单的应用——分布式互斥锁 271
10.5.2 实例2:进程调度系统 276
10.6 思考与总结 283
第2篇 Hadoop管理和容错篇 286
第11章 Hadoop管理 286
11.1 Hadoop权限管理 286
11.2 HDFS文件系统管理 292
11.3 Hadoop维护与管理 298
11.4 Hadoop常见问题及解决办法 300
11.5 思考与总结 310
第12章 Hadoop容错 311
12.1 Hadoop的可靠性 311
12.1.1 HDFS中的NameNode单点失效解决方案 311
12.1.2 HDFS数据块副本机制 313
12.1.3 HDFS心跳机制 319
12.1.4 HDFS负载均衡 320
12.1.5 MapReduce容错 321
12.2 Hadoop的SecondayNameNode机制 322
12.2.1 磁盘镜像与日志文件 322
12.2.2 SecondaryNameNode更新镜像的流程 323
12.3 Avatar机制 325
12.3.1 Avatar机制简介 325
12.3.2 Avatars部署实战 326
12.4 Hadoop_HBase容错 331
12.5 思考与总结 333
第3篇 Hadoop实战篇 336
第13章 综合实战1:Hadoop中的数据库访问 336
13.1 DBInputFormat类访问数据库 336
13.1.1 在DBInputFormat类中包含的内置类 336
13.1.2 使用DBInputFormat读取数据库表中的记录 337
13.1.3 使用示例 337
13.2 使用DBOutputFormat向数据库中写记录 340
13.3 思考与总结 343
第14章 综合实战2:一个简单的分布式的Grep 344
14.1 分析与设计 344
14.2 实现代码 345
14.3 运行程序 346
14.4 思考与总结 346
第15章 综合实战3:打造一个搜索引擎 348
15.1 搜索引擎工作原理 348
15.2 网页搜集与信息提取 350
15.2.1 设计的主要思想 350
15.2.2 系统设计目标 351
15.3 网页信息的提取与存储 352
15.4 MapReduce的预处理 353
15.4.1 第一步:源数据过滤 353
15.4.2 第二步:生成倒排文件 355
15.4.3 第三步:建立二级索引 362
15.5 建立Web信息查询服务 365
15.6 思考与总结 366
第16章 综合实战4:移动通信信令监测与查询 367
16.1 分析与设计 367
16.1.1 CDR数据文件的检测与索引创建任务调度 369
16.1.2 从HDFS读取数据并创建索引 370
16.1.3 查询CDR信息 371
16.2 代码实现 371
16.2.1 CDR文件检测和索引创建任务程序 371
16.2.2 读取CDR数据和索引创建处理 375
16.2.3 CDR查询 383
16.3 思考与总结 384
附录A Hadoop命令大全 385
附录B HDFS命令大全 392