第1部分 大数据时代指引 1
第1章 数据成功四原则 3
1.1 当数据成为一件“大”事 3
1.2 数据和单台服务器 4
1.3 大数据的权衡 5
1.3.1 构建可(无限)扩展的解决方案 6
1.3.2 构建可(在互联网上)共享数据的系统 7
1.3.3 构建解决方案,而非基础设施 8
1.3.4 关注从数据中解放价值 8
1.4 大数据流水线剖析 9
1.5 终极数据库 10
1.6 总结 10
第2部分 收集和共享海量数据 13
第2章 托管和共享TB级原始数据 15
2.1 文件之殇 16
2.1.1 共享大量文件的挑战 16
2.2 存储:基础设施即服务 17
2.2.1 网络很慢 18
2.3 选择合适的数据格式 18
2.3.1 XML:数据,描述你自己 20
2.3.2 JSON:程序员的选择 21
2.4 字符编码 22
2.4.1 文件转换 24
2.5 移动中的数据:数据序列化格式 25
2.5.1 ApacheThrift和Protocol Buffers 26
2.6 总结 27
第3章 构建基于NoSQL的Web应用采集众包数据 29
3.1 关系型数据库:命令及控制 30
3.1.1 关系数据库的ACID测试 32
3.2 当关系型数据库遇上互联网 33
3.2.1 CAP原理与BASE 34
3.3 非关系型数据库的模式 36
3.3.1 键-值数据库 36
3.3.2 文档存储 38
3.4 为写入性能优化:Redis 40
3.5 在多个Redis实例上分片 43
3.5.1 使用Twemproxy自动分区 44
3.5.2 Redis的替代选项 46
3.6 NewSQL:Codd归来 46
3.7 总结 47
第4章 解决数据孤岛问题的策略 49
4.1 堆满术语的仓库 49
4.1.1 实践中的问题 51
4.1.2 数据合规与安全规划 52
4.1.3 走进数据仓库 53
4.1.4 数据仓库的口诀:抽取、转换和加载 54
4.2 Hadoop:数据仓库中的大象 55
4.3 数据孤岛也可能是个优点 55
4.3.1 专注于数据问题,而不是技术 56
4.3.2 鼓励员工提出他们自己的问题 57
4.3.3 投资沟通数据孤岛的技术 57
4.4 融合:数据孤岛的终结 58
4.4.1 Luhn的商业智能系统是否能成为现实 59
4.5 总结 59
第3部分 数据探究 61
第5章 使用Hadoop、Hive和Shark探索大规模数据集 63
5.1 什么是数据仓库 64
5.2 Apache Hive:在Hadoop上进行交互式查询 66
5.2.1 Hive用例 66
5.2.2 Hive实战 67
5.2.3 在Hive中使用其他数据源 71
5.3 Shark:以内存的速度进行查询 72
5.4 云中的数据仓库 73
5.5 总结 74
第6章 使用Google BigQuery构建数据信息中心 77
6.1 分析型数据库 78
6.2 Dremel:均贫富 79
6.2.1 Dremel与MapReduce的不同之处 80
6.3 BigQuery:数据分析即服务 81
6.3.1 BigQuery的查询语言 82
6.4 建造自己的大数据信息面板 83
6.4.1 授权访问BigQuery API 84
6.4.2 运行查询并获取结果 87
6.4.3 缓存查询结果 88
6.4.4 添加可视化图形 89
6.5 分析型查询引擎的未来 91
6.6 总结 91
第7章 探索大数据的可视化策略 93
7.1 警世良言:将数据翻译成故事 94
7.2 人类尺度VS机器尺度 97
7.2.1 交互性 97
7.3 开发交互式数据应用 98
7.3.1 使用R和ggplot2实现交互式可视化 98
7.3.2 matplotlib:Python的2D图形库 100
7.3.3 D3.js:用于Web的交互式可视化库 100
7.4 总结 104
第4部分 构建数据流水线 107
第8章 整合:MapReduce数据流水线 109
8.1 数据流水线是什么 109
8.1.1 正确的工具 110
8.2 使用Hadoop Streaming搭建数据流水线 111
8.2.1 MapReduce和数据转换 111
8.2.2 最简单的流水线:stdin到stdout 113
8.3 单步MapReduce变换 115
8.3.1 从原始NVSS数据中抽取相关信息:map阶段 116
8.3.2 合计每月出生数:reducer阶段 117
8.3.3 在本地测试MapReduce流水线 118
8.3.4 在Hadoop集群上运行我们的MapReduce作业 119
8.4 降低复杂性:Hadoop 上 Python的MapReduce框架 120
8.4.1 使用mrjob重写Hadoop Streaming示例 121
8.4.2 建造一个多步流水线 122
8.4.3 在Elastic MapReduce上运行mrjob脚本 124
8.4.4 其他基于Python的MapReduce框架 125
8.5 总结 125
第9章 使用Pig和Cascading构建数据转换工作流 127
9.1 大规模数据工作流实战 128
9.2 多步MapReduce转换真复杂 128
9.2.1 Apache Pig:拒绝复杂 129
9.2.2 使用交互式Grunt shell运行Pig 130
9.2.3 过滤和优化数据工作流 132
9.2.4 以批处理模式运行Pig脚本 132
9.3 Cascading:构建健壮的数据工作流应用 133
9.3.1 以source和sink的方式思考 134
9.3.2 构建Cascading应用 135
9.3.3 创建一个Cascade:一个简单的JOIN例子 136
9.3.4 在Hadoop集群上部署Cascading应用 138
9.4 何时选择Pig或Cascading 139
9.5 总结 140
第5部分 基于大规模数据集的机器学习 141
第10章 使用Mahout构建数据分类系统 143
10.1 机器能否预测未来 144
10.2 机器学习的挑战 144
10.2.1 贝叶斯分类 146
10.2.2 聚类 146
10.2.3 推荐引擎 148
10.3 Apache Mahout:可伸缩的机器学习工具 148
10.3.1 使用Mahout进行文本分类 149
10.4 MLbase:分布式机器学习框架 152
10.5 总结 152
第6部分 基于大规模数据集的统计分析 155
第11章 使用R语言处理大数据集 157
11.1 统计学为什么性感 158
11.1.1 R处理大型数据集的局限性 159
11.1.2 R的数据帧和矩阵 161
11.2 处理大数据集的策略 162
11.2.1 大矩阵处理:bigmemory和biganalytics 162
11.2.2 ff:使用大于内存的数据帧 164
11.2.3 biglm:大规模数据集的线性回归 165
11.2.4 RHadoop:使用R访问ApacheHadoop 166
11.3 总结 168
第12章 使用Python和Pandas构建分析工作流 171
12.1 数据乐园中自在的蟒蛇——Python 172
12.1.1 为统计性计算选择一门语言 172
12.1.2 扩展现有代码 173
12.1.3 工具和测试 174
12.2 用于数据处理的Python库 174
12.2.1 NumPy 175
12.2.2 SciPy:Python的科学计算库 176
12.2.3 数据分析库Pandas 178
12.3 构建更复杂的工作流 182
12.3.1 处理损坏或丢失的记录 184
12.4 iPython:科学计算工具链的最后一环 185
12.4.1 在集群上并行执行iPython 186
12.5 总结 190
第7部分 展望未来 191
第13章 何时选择自制、购买或外包 193
13.1 功能重合的解决方案 193
13.2 理解你的数据问题 195
13.3 自制还是购买问题的参考手册 197
13.3.1 你已经对哪些技术有所投入 197
13.3.2 从小处着手 198
13.3.3 规划时考虑可扩展性 198
13.4 私人数据中心 199
13.5 了解开源的成本 201
13.6 一切皆服务 202
13.7 总结 202
第14章 未来:数据科技的几个趋势 205
14.1 Hadoop:搅局者与被搅局者 206
14.2 一切皆在云中 208
14.3 数据科学家的兴衰 209
14.4 融合:终极数据库 212
14.5 文化融合 213
14.6 总结 214