前言
致谢
关于本书
第1 部分 背景和基本原理
1 跳跃中的Hadoop
1.1 什么是Hadoop
1.1.1 Hadoop 的核心组件
1.1.2 Hadoop 生态圈
1.1.3 物理架构
1.1.4 谁在使用Hadoop
1.1.5 Hadoop 的局限性
1.2 运行Hadoop
1.2.1 下载并安装Hadoop
1.2.2 Hadoop 的配置
1.2.3 CLI 基本命令
1.2.4 运行MapReduce 作业
1.3 本章小结
第2 部分 数据逻辑.
2 将数据导入导出Hadoop.
2.1 导入导出的关键要素
2.2 将数据导入Hadoop .
2.2.1 将日志文件导入Hadoop
技术点1 使用Flume 将系统日志文件导入HDFS
2.2.2 导入导出半结构化和二进制文件
技术点2 自动复制文件到HDFS 的机制
技术点3 使用Oozie 定期执行数据导入活动
2.2.3 从数据库中拉数据
技术点4 使用MapReduce 将数据导入数据库
技术点5 使用Sqoop 从MySQL 导入数据
2.2.4 HBase
技术点6 HBase 导入HDFS
技术点7 将HBase 作为MapReduce 的数据源
2.3 将数据导出Hadoop
2.3.1 将数据导入本地文件系统
技术点8 自动复制HDFS 中的文件
2.3.2 数据库
技术点9 使用Sqoop 将数据导入MySQL
2.3.3 Hbase
技术点10 将数据从HDFS 导入HBase
技术点11 使用HBase 作为MapReduce 的数据接收器
2.4 本章小结
3 数据序列化――处理文本文件及其他格式的文件
3.1 了解MapReduce 中的输入和输出
3.1.1 数据输入
3.1.2 数据输出
3.2 处理常见的序列化格式
3.2.1 XML .
技术点12 MapReduce 和XML
3.2.2 JSON .
技术点13 MapReduce 和JSON .
3.3 大数据的序列化格式
3.3.1 比较SequenceFiles、Protocol Buffers、Thrift 和 Avro
3.3.2 Sequence File
技术点14 处理SequenceFile
3.3.3 Protocol Buffers
技术点15 整合Protocol Buffers 和MapReduce .
3.3.4 Thrift .
技术点16 使用Thrift
3.3.5 Avro
技术点17 MapReduce 的下一代数据序列化技术
3.4 自定义文件格式
3.4.1 输入输出格式
技术点18 输入和输出格式为CSV 的文件
3.4.2 output committing 的重要性
3.5 本章小结
第3 部分 大数据模式
4 处理大数据的MapReduce 模式
4.1 Join
4.1.1 Repartition Join
技术点19 优化repartition join
4.1.2 Replicated Join
4.1.3 Semi-join
技术点20 实现semi-join
4.1.4 为你的数据挑选最优的合并策略
4.2 排序
4.2.1 二次排序
技术点21 二次排序的实现
4.2.2 整体并行排序
技术点22 通过多个reducer 对key 进行排序
4.3 抽样
技术点23 蓄水池抽样(reservoir 抽样)
4.4 本章小结
5 优化HDFS 处理大数据的技术
5.1 处理小文件
技术点24 使用Avro 存储大量小文件
5.2 通过压缩提高数据存储效率
技术点25 选择合适的压缩解码器
技术点26 在HDFS、MapReduce、Pig 和Hive 中使用数据压缩
技术点27 在MapReduce、Hive 和Pig 中处理可分割的LZOP
5.3 本章小结
6 诊断和优化性能问题
6.1 衡量MapReduce 和你的环境
6.1.1 提取作业统计信息的工具
6.1.2 监控
6.2 确定性能问题的原因
6.2.1 了解哪些因素会影响MapReduce 作业的性能
6.2.2 map 端异常
技术点28 发现输入数据中的坑
技术点29 确定map 端数据倾斜问题
技术点30 判定map 任务吞吐量
技术点31 小文件
技术点32 不可切割的文件
6.2.3 reduce 端问题
技术点33 reducer 任务数过大或过小 .
技术点34 定位reduce 端数据倾斜问题
技术点35 确定reduce 任务是否存在整体吞吐量过低
技术点36 缓慢的洗牌(shuffle)和排序 .
6.2.4 任务的一般性能问题
技术点37 作业竞争和调度器限制
技术点38 使用堆转储来查找未优化的用户代码
6.2.5 硬件性能问题
技术点39 查找硬件的失效
技术点40 CPU 竞争 .
技术点41 内存交换
技术点42 磁盘健康
技术点43 网络
6.3 可视化
技术点44 提取并可视化任务执行时间
6.4 优化 .
6.4.1 剖析MapReduce 的用户代码
技术点45 剖析map 和reduce 任务
6.4.2 参数配置
6.4.3 优化 shuffle 和 sort 阶段
技术点46 避免reducer
技术点47 过滤和投影
技术点48 使用 combiner
技术点49 超炫的使用比较器的快速排序
6.4.4 减轻倾斜
技术点50 收集倾斜数据
技术点51 减轻reducer 阶段倾斜
6.4.5 在MapReduce 中优化用户的Java 代码
6.4.6 数据序列化
6.5 本章小结
第4 部分 数据科学.
7 数据结构和算法的运用
7.1 使用图进行数据建模和解决问题
7.1.1 模拟图
7.1.2 最短路径算法
技术点52 找出两个用户间的最短距离
7.1.3 friends-of-friends(FoF)
技术点53 计算FoF
7.1.4 PageRank
技术点54 通过Web 图计算PageRank
7.2 Bloom filter
技术点55 在MapReduce 中并行创建Bloom filter
技术点56 通过MapReduce 对Bloom filter 进行semi-join
7.3 本章小结
8 结合R 和Hadoop 进行数据统计
8.1 比较R 和MapReduce 集成的几种方法
8.2 R 基础知识
8.3 R 和Streaming
8.3.1 Streaming 和map-only R
技术点57 计算股票日平均值
8.3.2 Streaming、R 和完整的MapReduce
技术点58 计算股票的累积均值
8.4 Rhipe――将客户端R 和Hadoop 进行集成
技术点59 使用Rhipe 计算CMA
8.5 RHadoop――更简单地在客户端集成R 和Hadoop 的技术
技术点60 使用RHadoop 计算CMA
8.6 本章小结
9 使用Mahout 进行预测分析
9.1 使用recommender 提供产品建议
9.1.1 相似性度量的可视化
9.1.2 GroupLens 数据集
9.1.3 基于用户的recommender
9.1.4 基于物品的recommender
技术点61 使用基于物品的recommender 进行电影评级
9.2 classification
9.2.1 编写一个手动naïve Bayesian 分类器
9.2.2 可扩展的垃圾邮件侦测分类系统
技术点62 使用Mahout 训练和测试垃圾邮件分类器
9.2.3 其他分类算法
9.3 K-means clustering
9.3.1 简单介绍
9.3.2 并行执行K-means
技术点63 K-means 处理合成的二维数据集
9.3.3 K-means 和文本
9.3.4 其他Mahout clustering 算法 .
9.4 本章小结
第5 部分 驯服大象
10 深入解析 Hive
10.1 Hive 基础
10.1.1 安装
10.1.2 元存储
10.1.3 数据库、表、分区和存储
10.1.4 数据模型
10.1.5 查询语言
10.1.6 交互式和非交互式Hive
10.2 使用Hive 进行数据分析
10.2.1 序列化和反序列化
技术点64 载入日志文件
10.2.2 UDF、分区、分桶和压缩
技术点65 编写UDF 和压缩分区表
10.2.3 数据合并
技术点66 优化Hive 合并
10.2.4 分组、排序和explain
10.3 本章小结
11 Pig 流管道
11.1 Pig 基础
11.1.1 安装
11.1.2 架构
11.1.3 PigLatin.
11.1.4 数据类型
11.1.5 操作符和函数
11.1.6 交互式和非交互式的Pig
11.2 使用Pig 在日志数据中发现恶意行为者
11.2.1 加载数据
技术点67 加载Apache 日志文件
11.2.2 过滤和投影
技术点68 通过过滤和投影减少数据处理量
11.2.3 分组和聚合UDF
技术点69 IP 地址的分组和计数
11.2.4 使用UDF 进行定位
技术点70 使用分布式缓存进行IP 地理定位
11.2.5 流
技术点71 使用你的脚本合并Pig
11.2.6 合并
技术点72 在Pig 中合并数据
11.2.7 排序
技术点73 元组排序
11.2.8 存储数据
技术点74 在SequenceFiles 中存储数据
11.3 使用Pig 优化用户的工作流程
技术点75 通过4 步快速处理大数据
11.4 性能
技术点76 Pig 优化
11.5 本章小结
12 Crunch 及相关技术
12.1 什么是Crunch
12.1.1 背景和概念
12.1.2 基本原理
12.1.3 简单示例
12.2 发现日志中最热门的URL
技术点77 使用Crunch 进行日志解析和基本分析
12.3 合并
技术点78 Crunch 的repartition join
12.4 Cascading
12.5 本章小结
13 测试和调试.
13.1 测试
13.1.1 有效的单元测试的基本要素
13.1.2 MRUnit .
技术点79 MapReduce 函数、作业和管道的单元测试
13.1.3 LocalJobRunner
技术点80 用LocalJobRunner 进行重量级的作业测试
13.1.4 集成和QA 测试
13.2 调试用户空间的问题
13.2.1 访问任务日志
技术点81 检查任务日志
13.2.2 调试不可预期的输入
技术点82 定位input split 问题
13.2.3 调试JVM 配置
技术点83 解决任务的JVM 启动参数
13.2.4 高效调试的编码准则
技术点84 调试和错误处理
13.3 MapReduce 陷阱
技术点85 MapReduce 反模式
13.4 本章小结
附录A 相关技术
附录B Hadoop 内置的数据导入导出工具
附录C HDFS 解剖.
附录D 优化MapReduce 合并框架
索引