第1 章 Hadoop 2.X 1
1.1 Hadoop 的起源 1
1.2 Hadoop 的演进 2
1.3 Hadoop 2.X 6
1.3.1 Yet Another Resource Negotiator(YARN) 7
1.3.2 存储层的增强 8
1.3.3 支持增强 11
1.4 Hadoop 的发行版 11
1.4.1 选哪个Hadoop 发行版 12
1.4.2 可用的发行版 14
1.5 小结 16
第2 章 MapReduce 进阶 17
2.1 MapReduce 输入 18
2.1.1 InputFormat 类 18
2.1.2 InputSplit 类 18
2.1.3 RecordReader 类 19
2.1.4 Hadoop 的“小文件”问题 20
2.1.5 输入过滤 24
2.2 Map 任务 27
2.2.1 dfs.blocksize 属性 28
2.2.2 中间输出结果的排序与溢出 28
2.2.3 本地reducer 和Combiner 31
2.2.4 获取中间输出结果——Map 侧 31
2.3 Reduce 任务 32
2.3.1 获取中间输出结果——Reduce 侧 32
2.3.2 中间输出结果的合并与溢出 33
2.4 MapReduce 的输出 34
2.5 MapReduce 作业的计数器 34
2.6 数据连接的处理 36
2.6.1 Reduce 侧的连接 36
2.6.2 Map 侧的连接 42
2.7 小结 45
第3 章 Pig 进阶 47
3.1 Pig 对比SQL 48
3.2 不同的执行模式 48
3.3 Pig 的复合数据类型 49
3.4 编译Pig 脚本 50
3.4.1 逻辑计划 50
3.4.2 物理计划 51
3.4.3 MapReduce 计划 52
3.5 开发和调试助手 52
3.5.1 DESCRIBE 命令 52
3.5.2 EXPLAIN 命令 53
3.5.3 ILLUSTRATE 命令 53
3.6 Pig 操作符的高级特性 54
3.6.1 FOREACH 操作符进阶 54
3.6.2 Pig 的特殊连接 58
3.7 用户定义函数 61
3.7.1 运算函数 61
3.7.2 加载函数 66
3.7.3 存储函数 68
3.8 Pig 的性能优化 69
3.8.1 优化规则 69
3.8.2 Pig 脚本性能的测量 71
3.8.3 Pig 的Combiner 72
3.8.4 Bag 数据类型的内存 72
3.8.5 Pig 的reducer 数量 72
3.8.6 Pig 的multiquery 模式 73
3.9 最佳实践 73
3.9.1 明确地使用类型 74
3.9.2 更早更频繁地使用投影 74
3.9.3 更早更频繁地使用过滤 74
3.9.4 使用LIMIT 操作符 74
3.9.5 使用DISTINCT 操作符 74
3.9.6 减少操作 74
3.9.7 使用Algebraic UDF 75
3.9.8 使用Accumulator UDF 75
3.9.9 剔除数据中的空记录 75
3.9.10 使用特殊连接 75
3.9.11 压缩中间结果 75
3.9.12 合并小文件 76
3.10 小结 76
第4 章 Hive 进阶 77
4.1 Hive 架构 77
4.1.1 Hive 元存储 78
4.1.2 Hive 编译器 78
4.1.3 Hive 执行引擎 78
4.1.4 Hive 的支持组件 79
4.2 数据类型 79
4.3 文件格式 80
4.3.1 压缩文件 80
4.3.2 ORC 文件 81
4.3.3 Parquet 文件 81
4.4 数据模型 82
4.4.1 动态分区 84
4.4.2 Hive 表索引 85
4.5 Hive 查询优化器 87
4.6 DML 进阶 88
4.6.1 GROUP BY 操作 88
4.6.2 ORDER BY 与SORT BY 88
4.6.3 JOIN 类型 88
4.6.4 高级聚合 89
4.6.5 其他高级语句 90
4.7 UDF、UDAF 和UDTF 90
4.8 小结 93
第5 章 序列化和Hadoop I/O 95
5.1 Hadoop 数据序列化 95
5.1.1 Writable 与WritableComparable 96
5.1.2 Hadoop 与Java 序列化的区别 98
5.2 Avro 序列化 100
5.2.1 Avro 与MapReduce 102
5.2.2 Avro 与Pig 105
5.2.3 Avro 与Hive 106
5.2.4 比较Avro 与Protocol Buffers/Thrift 107
5.3 文件格式 108
5.3.1 Sequence 文件格式 108
5.3.2 MapFile 格式 111
5.3.3 其他数据结构 113
5.4 压缩 113
5.4.1 分片与压缩 114
5.4.2 压缩范围 115
5.5 小结 115
第6 章 YARN——其他应用模式进入Hadoop 的引路人 116
6.1 YARN 的架构 117
6.1.1 资源管理器 117
6.1.2 Application Master 118
6.1.3 节点管理器 119
6.1.4 YARN 客户端 120
6.2 开发YARN 的应用程序 120
6.2.1 实现YARN 客户端 120
6.2.2 实现AM 实例 125
6.3 YARN 的监控 129
6.4 YARN 中的作业调度 134
6.4.1 容量调度器 134
6.4.2 公平调度器 137
6.5 YARN 命令行 139
6.5.1 用户命令 140
6.5.2 管理员命令 140
6.6 小结 141
第7 章 基于YARN 的Storm——Hadoop中的低延时处理 142
7.1 批处理对比流式处理 142
7.2 Apache Storm 144
7.2.1 Apache Storm 的集群架构 144
7.2.2 Apache Storm 的计算和数据模型 145
7.2.3 Apache Storm 用例 146
7.2.4 Apache Storm 的开发 147
7.2.5 Apache Storm 0.9.1 153
7.3 基于YARN 的Storm 154
7.3.1 在YARN 上安装Apache Storm 154
7.3.2 安装过程 154
7.4 小结 161
第8 章 云上的Hadoop 162
8.1 云计算的特点 162
8.2 云上的Hadoop 163
8.3 亚马逊Elastic MapReduce 164
8.4 小结 175
第9 章 HDFS 替代品 176
9.1 HDFS 的优缺点 176
9.2 亚马逊AWS S3 177
9.3 在Hadoop 中实现文件系统 179
9.4 在Hadoop 中实现S3 原生文件系统 179
9.5 小结 189
第10 章 HDFS 联合 190
10.1 旧版HDFS 架构的限制 190
10.2 HDFS 联合的架构 192
10.2.1 HDFS 联合的好处 193
10.2.2 部署联合NameNode 193
10.3 HDFS 高可用性 195
10.3.1 从NameNode、检查节点和备份节点 195
10.3.2 高可用性——共享edits 196
10.3.3 HDFS 实用工具 197
10.3.4 三层与四层网络拓扑 197
10.4 HDFS 块放置策略 198
10.5 小结 200
第11 章 Hadoop 安全 201
11.1 安全的核心 201
11.2 Hadoop 中的认证 202
11.2.1 Kerberos 认证 202
11.2.2 Kerberos 的架构和工作流 203
11.2.3 Kerberos 认证和Hadoop 204
11.2.4 HTTP 接口的认证 204
11.3 Hadoop 中的授权 205
11.3.1 HDFS 的授权 205
11.3.2 限制HDFS 的使用量 208
11.3.3 Hadoop 中的服务级授权 209
11.4 Hadoop 中的数据保密性 211
11.5 Hadoop 中的日志审计 216
11.6 小结 217
第12 章 使用Hadoop 进行数据分析 218
12.1 数据分析工作流 218
12.2 机器学习 220
12.3 Apache Mahout 222
12.4 使用Hadoop 和Mahout 进行文档分析 223
12.4.1 词频 223
12.4.2 文频 224
12.4.3 词频-逆向文频 224
12.4.4 Pig 中的Tf-idf 225
12.4.5 余弦相似度距离度量 228
12.4.6 使用k-means 的聚类 228
12.4.7 使用Apache Mahout 进行k-means 聚类 229
12.5 RHadoop 233
12.6 小结 233
附录 微软Windows 中的Hadoop 235