内容简介
第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 编写一个手动naive 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合并框架
索引