基础篇:Hadoop基础
第1章绪论2
1.1Hadoop和云计算2
1.1.1Hadoop的电梯演讲2
1.1.2Hadoop生态圈3
1.1.3云计算的定义6
1.1.4云计算的类型7
1.1.5Hadoop和云计算8
1.2Hadoop和大数据9
1.2.1大数据的定义9
1.2.2大数据的结构类型10
1.2.3大数据行业应用实例12
1.2.4Hadoop和大数据13
1.2.5其他大数据处理平台14
1.3数据挖掘和商业智能15
1.3.1数据挖掘的定义15
1.3.2数据仓库17
1.3.3操作数据库系统和数据仓库系统的区别18
1.3.4为什么需要分离的数据仓库19
1.3.5商业智能19
1.3.6大数据时代的商业智能20
1.4小结21
第2章环境准备22
2.1Hadoop的发行版本选择22
2.1.1ApacheHadoop22
2.1.2CDH22
2.1.3Hadoop的版本23
2.1.4如何选择Hadoop的版本25
2.2Hadoop架构26
2.2.1HadoopHDFS架构27
2.2.2YARN架构28
2.2.3Hadoop架构28
2.3安装Hadoop29
2.3.1安装运行环境30
2.3.2修改主机名和用户名36
2.3.3配置静态IP地址36
2.3.4配置SSH无密码连接37
2.3.5安装JDK38
2.3.6配置Hadoop39
2.3.7格式化HDFS42
2.3.8启动Hadoop并验证安装42
2.4安装Hive43
2.4.1安装元数据库44
2.4.2修改Hive配置文件44
2.4.3验证安装45
2.5安装HBase46
2.5.1解压文件并修改Zookeeper相关配置46
2.5.2配置节点46
2.5.3配置环境变量47
2.5.4启动并验证47
2.6安装Sqoop47
2.7ClouderaManager48
2.8小结51
第3章Hadoop的基石:HDFS52
3.1认识HDFS52
3.1.1HDFS的设计理念54
3.1.2HDFS的架构54
3.1.3HDFS容错58
3.2HDFS读取文件和写入文件58
3.2.1块的分布59
3.2.2数据读取60
3.2.3写入数据61
3.2.4数据完整性62
3.3如何访问HDFS63
3.3.1命令行接口63
3.3.2JavaAPI66
3.3.3其他常用的接口75
3.3.4WebUI75
3.4HDFS中的新特性76
3.4.1NameNodeHA76
3.4.2NameNodeFederation78
3.4.3HDFSSnapshots79
3.5小结79
第4章YARN:统一资源管理和调平台80
4.1YARN是什么80
4.2统一资源管理和调度平台范型81
4.2.1集中式调度器81
4.2.2双层调度器81
4.2.3状态共享调度器82
4.3YARN的架构82
4.3.1ResourceManager83
4.3.2NodeManager85
4.3.3ApplicationMaster87
4.3.4YARN的资源表示模型Container87
4.4YARN的工作流程88
4.5YARN的调度器89
4.5.1YARN的资源管理机制89
4.5.2FIFOScheduler90
4.5.3CapacityScheduler90
4.5.4FairScheduler91
4.6YARN命令行92
4.7ApacheMesos95
4.8小结96
第5章分而治之的智慧:MapReduce97
5.1认识MapReduce97
5.1.1MapReduce的编程思想98
5.1.2MapReduce运行环境100
5.1.3MapReduce作业和任务102
5.1.4MapReduce的计算资源划分102
5.1.5MapReduce的局限性103
5.2HelloWordCount104
5.2.1WordCount的设计思路104
5.2.2编写WordCount105
5.2.3运行程序107
5.2.4还能更快吗109
5.3MapReduce的过程109
5.3.1从输入到输出109
5.3.2input110
5.3.3map及中间结果的输出112
5.3.4shuffle113
5.3.5reduce及最后结果的输出115
5.3.6sort115
5.3.7作业的进度组成116
5.4MapReduce的工作机制116
5.4.1作业提交117
5.4.2作业初始化118
5.4.3任务分配118
5.4.4任务执行118
5.4.5任务完成118
5.4.6推测执行119
5.4.7MapReduce容错119
5.5MapReduce编程120
5.5.1Writable类120
5.5.2编写Writable类123
5.5.3编写Mapper类124
5.5.4编写Reducer类125
5.5.5控制shuffle126
5.5.6控制sort128
5.5.7编写main函数129
5.6MapReduce编程实例:连接130
5.6.1设计思路131
5.6.2编写Mapper类131
5.6.3编写Reducer类132
5.6.4编写main函数133
5.7MapReduce编程实例:二次排序134
5.7.1设计思路134
5.7.2编写Mapper类135
5.7.3编写Partitioner类136
5.7.4编写SortComparator类136
5.7.5编写Reducer类137
5.7.6编写main函数137
5.8MapReduce编程实例:全排序139
5.8.1设计思路139
5.8.2编写代码140
5.9小结141
第6章SQLonHadoop:Hive142
6.1认识Hive142
6.1.1从MapReduce到SQL143
6.1.2Hive架构144
6.1.3Hive与关系型数据库的区别146
6.1.4Hive命令的使用147
6.2数据类型和存储格式149
6.2.1基本数据类型149
6.2.2复杂数据类型149
6.2.3存储格式150
6.2.4数据格式151
6.3HQL:数据定义152
6.3.1Hive中的数据库152
6.3.2Hive中的表154
6.3.3创建表154
6.3.4管理表156
6.3.5外部表156
6.3.6分区表156
6.3.7删除表158
6.3.8修改表158
6.4HQL:数据操作159
6.4.1装载数据159
6.4.2通过查询语句向表中插入数据160
6.4.3利用动态分区向表中插入数据160
6.4.4通过CTAS加载数据161
6.4.5导出数据161
6.5HQL:数据查询162
6.5.1SELECT…FROM语句162
6.5.2WHERE语句163
6.5.3GROUPBY和HAVING语句164
6.5.4JOIN语句164
6.5.5ORDERBY和SORTBY语句166
6.5.6DISTRIBUTEBY和SORTBY语句167
6.5.7CLUSTERBY167
6.5.8分桶和抽样168
6.5.9UNIONALL168
6.6Hive函数168
6.6.1标准函数168
6.6.2聚合函数168
6.6.3表生成函数169
6.7Hive用户自定义函数169
6.7.1UDF169
6.7.2UDAF170
6.7.3UDTF171
6.7.4运行173
6.8小结173
第7章SQLtoHadoop:Sqoop174
7.1一个Sqoop示例174
7.2导入过程176
7.3导出过程178
7.4Sqoop的使用179
7.4.1codegen180
7.4.2create-hive-table180
7.4.3eval181
7.4.4export181
7.4.5help182
7.4.6import182
7.4.7import-all-tables183
7.4.8job184
7.4.9list-databases184
7.4.10list-tables184
7.4.11merge184
7.4.12metastore185
7.4.13version186
7.5小结186
第8章HBase:HadoopDatabase187
8.1酸和碱:两种数据库事务方法论187
8.1.1ACID188
8.1.2BASE188
8.2CAP定理188
8.3NoSQL的架构模式189
8.3.1键值存储189
8.3.2图存储190
8.3.3列族存储191
8.3.4文档存储192
8.4HBase的架构模式193
8.4.1行键、列族、列和单元格193
8.4.2HMaster194
8.4.3Region和RegionServer195
8.4.4WAL195
8.4.5HFile195
8.4.6Zookeeper197
8.4.7HBase架构197
8.5HBase写入和读取数据198
8.5.1Region定位198
8.5.2HBase写入数据199
8.5.3HBase读取数据199
8.6HBase基础API200
8.6.1创建表201
8.6.2插入202
8.6.3读取203
8.6.4扫描204
8.6.5删除单元格206
8.6.6删除表207
8.7HBase高级API207
8.7.1过滤器208
8.7.2计数器208
8.7.3协处理器209
8.8小结214
第9章Hadoop性能调优和运维215
9.1Hadoop客户端215
9.2Hadoop性能调优216
9.2.1选择合适的硬件216
9.2.2操作系统调优218
9.2.3JVM调优219
9.2.4Hadoop参数调优219
9.3Hive性能调优225
9.3.1JOIN优化226
9.3.2Reducer的数量226
9.3.3列裁剪226
9.3.4分区裁剪226
9.3.5GROUPBY优化226
9.3.6合并小文件227
9.3.7MULTI-GROUPBY和MULTI-INSERT228
9.3.8利用UNIONALL特性228
9.3.9并行执行228
9.3.10全排序228
9.3.11TopN229
9.4HBase调优229
9.4.1通用调优229
9.4.2客户端调优230
9.4.3写调优231
9.4.4读调优231
9.4.5表设计调优232
9.5Hadoop运维232
9.5.1集群节点动态扩容和卸载233
9.5.2利用SecondaryNameNode恢复NameNode234
9.5.3常见的运维技巧234
9.5.4常见的异常处理235
9.6小结236
应用篇:商业智能系统项目实战
第10章在线图书销售商业智能系统238
10.1项目背景238
10.2功能需求239
10.3非功能需求240
10.4小结240
第11章系统结构设计241
11.1系统架构241
11.2功能设计242
11.3数据仓库结构243
11.4系统网络拓扑与硬件选型246
11.4.1系统网络拓扑246
11.4.2系统硬件选型248
11.5技术选型249
11.5.1平台选型249
11.5.2系统开发语言选型249
11.6小结249
第12章在开发之前250
12.1新建一个工程250
12.1.1安装Python250
12.1.2安装PyDev插件251
12.1.3新建PyDev项目252
12.2代码目录结构253
12.3项目的环境变量253
12.4如何调试254
12.5小结254
第13章实现数据导入导出模块255
13.1处理流程255
13.2导入方式256
13.2.1全量导入256
13.2.2增量导入256
13.3读取配置文件257
13.4SqoopUtil261
13.5整合262
13.6导入说明262
13.7导出模块263
13.8小结265
第14章实现数据分析工具模块266
14.1处理流程266
14.2读取配置文件266
14.3HiveUtil268
14.4整合268
14.5数据分析和报表269
14.5.1OLAP和Hive269
14.5.2OLAP和多维模型270
14.5.3选MySQL还是选HBase272
14.6小结273
第15章实现业务数据的数据清洗模块274
15.1ETL274
15.1.1数据抽取274
15.1.2数据转换274
15.1.3数据清洗工具275
15.2处理流程275
15.3数据去重276
15.3.1产生原因276
15.3.2去重方法277
15.3.3一个很有用的UDF:RowNum277
15.3.4第二种去重方法279
15.3.5进行去重279
15.4小结282
第16章实现点击流日志的数据清洗模块283
16.1数据仓库和Web283
16.2处理流程285
16.3字段的获取285
16.4编写MapReduce作业288
16.4.1编写IP地址解析器288
16.4.2编写Mapper类291
16.4.3编写Partitioner类295
16.4.4编写SortComparator类295
16.4.5编写Reducer类297
16.4.6编写main函数298
16.4.7通过Python调用jar文件299
16.5还能做什么300
16.5.1网站分析的指标300
16.5.2网站分析的决策支持301
16.6小结301
第17章实现购书转化率分析模块302
17.1漏斗模型302
17.2处理流程303
17.3读取配置文件303
17.4提取所需数据304
17.5编写转化率分析MapReduce作业305
17.5.1编写Mapper类306
17.5.2编写Partitioner类308
17.5.3编写SortComparator类309
17.5.4编写Reducer类310
17.5.5编写Driver类312
17.5.6通过Python模块调用jar文件314
17.6对中间结果进行汇总得到最终结果314
17.7整合316
17.8小结316
第18章实现购书用户聚类模块317
18.1物以类聚317
18.2聚类算法318
18.2.1k-means算法318
18.2.2Canopy算法319
18.2.3数据向量化320
18.2.4数据归一化321
18.2.5相似性度量322
18.3用MapReduce实现聚类算法323
18.3.1Canopy算法与MapReduce323
18.3.2k-means算法与MapReduce323
18.3.3ApacheMahout324
18.4处理流程324
18.5提取数据并做归一化325
18.6维度相关性327
18.6.1维度的选取327
18.6.2相关系数与相关系数矩阵328
18.6.3计算相关系数矩阵328
18.7使用Mahout完成聚类329
18.7.1使用Mahout329
18.7.2解析Mahout的输出332
18.7.3得到聚类结果334
18.8得到最终结果335
18.9评估聚类结果337
18.9.1一份不适合聚类的数据337
18.9.2簇间距离和簇内距离337
18.9.3计算平均簇间距离338
18.10小结339
第19章实现调度模块340
19.1工作流340
19.2编写代码341
19.3crontab342
19.4让数据说话343
19.5小结344
结束篇:总结和展望
第20章总结和展望346
20.1总结346
20.2BDAS347
20.3Dremel系技术348
20.4Pregel系技术349
20.5Docker和Kubernetes350
20.6数据集成工具NiFi350
20.7小结351
参考文献352