本书针对愿意加入大数据行业的初学者量身定做,以简练风趣的语言介绍了大数据程核心技术及相关案例。内容包括了数据的基本概念、Hadoop的安装与配置、HDFS、基于Hadoop3的HDFS高可用、Zookeeper、MapReduce、YARN、Sqoop、KafKa、Redis,每个知识点配有可运行的案例,同时结合企业实际案例,让读者能够掌握从大数据环境搭建到大数据核心技术,并且进一步熟悉企业案例的分析及开发过程,从而轻松进入到大数据领域。本书实用性强,非常适合Hadoop大数据分析入门读者阅读,也适合相关院校作为大数据分析与挖掘的教材使用。
前言
第1篇 Hadoop基础知识
第1章 初识Hadoop2
1.1 大数据初探2
1.1.1 大数据技术2
1.1.2 大数据技术框架3
1.1.3 大数据的特点3
1.1.4 大数据在各个行业中的应用4
1.1.5 大数据计算模式4
1.1.6 大数据与云计算、物联网的关系4
1.2 Hadoop简介5
1.2.1 Hadoop应用现状6
1.2.2 Hadoop简介与意义6
1.3 小结6
第2章 Hadoop的安装与配置7
2.1 虚拟机的创建7
2.2 安装Linux系统10
2.3 配置网络信息11
2.4 克隆服务器12
2.5 SSH免密码登录13
2.6 安装和配置JDK15
2.6.1 上传安装包15
2.6.2 安装JDK16
2.6.3 配置环境变量16
2.7 Hadoop环境变量配置16
2.7.1 解压缩Hadoop压缩包17
2.7.2 配置Hadoop的bin和sbin文件夹到环境变量中17
2.7.3 修改/etc/hadoop/hadoop-env.sh17
2.8 Hadoop分布式安装17
2.8.1 伪分布式安装17
2.8.2 完全分布式安装19
2.9 小结21
第3章 Hadoop分布式文件系统22
3.1 DFS介绍22
3.1.1 什么是DFS22
3.1.2 DFS的结构22
3.2 HDFS介绍23
3.2.1 HDFS的概念及体系结构23
3.2.2 HDFS的设计23
3.2.3 HDFS的优点和缺点24
3.2.4 HDFS的执行原理24
3.2.5 HDFS的核心概念25
3.2.6 HDFS读文件流程27
3.2.7 HDFS写文件流程28
3.2.8 Block的副本放置策略29
3.3 Hadoop中HDFS的常用命令30
3.3.1 对文件的操作30
3.3.2 管理与更新31
3.4 HDFS的应用31
3.4.1 基于Shell的操作31
3.4.2 基于Java API的操作33
3.4.3 创建文件夹34
3.4.4 递归显示文件34
3.4.5 文件上传35
3.4.6 文件下载35
3.5 小结36
第4章 基于Hadoop 3的HDFS高可用37
4.1 Hadoop 3.x的发展37
4.1.1 Hadoop 3新特性37
4.1.2 Hadoop 3 HDFS集群架构38
4.2 Hadoop 3 HDFS完全分布式搭建39
4.2.1 安装JDK40
4.2.2 配置JDK环境变量40
4.2.3 配置免密码登录40
4.2.4 配置IP和主机名字映射关系41
4.2.5 SSH免密码登录设置41
4.2.6 配置Hadoop 3.1.042
4.3 什么是HDFS高可用47
4.3.1 HDFS高可用实现原理47
4.3.2 HDFS高可用实现48
4.4 搭建HDFS高可用50
4.4.1 配置ZooKeeper50
4.4.2 配置Hadoop配置文件52
4.4.3 将配置文件复制到其他节点上54
4.4.4 启动JN节点54
4.4.5 格式化55
4.4.6 复制元数据到node2节点上55
4.4.7 格式化ZKFC55
4.4.8 启动集群56
4.4.9 通过浏览器查看集群状态56
4.4.10 高可用测试57
4.5 小结58
第2篇 Hadoop核心技术
第5章 Hadoop的分布式协调服务——ZooKeeper60
5.1 ZooKeeper的核心概念60
5.1.1 Session会话机制60
5.1.2 数据节点、版本与Watcher的关联61
5.1.3 ACL策略61
5.2 ZooKeeper的安装与运行61
5.3 ZooKeeper服务器端的常用命令63
5.4 客户端连接ZooKeeper的相关操作64
5.4.1 查看ZooKeeper常用命令64
5.4.2 connect命令与ls命令65
5.4.3 create命令——创建节点65
5.4.4 get命令——获取数据与信息66
5.4.5 set命令——修改节点内容66
5.4.6 delete命令——删除节点67
5.5 使用Java API访问ZooKeeper67
5.5.1 环境准备与创建会话实例68
5.5.2 节点创建实例69
5.5.3 Java API访问ZooKeeper实例70
5.6 小结73
第6章 分布式离线计算框架——MapReduce74
6.1 MapReduce概述74
6.1.1 MapReduce的特点74
6.1.2 MapReduce的应用场景75
6.2 MapReduce执行过程76
6.2.1 单词统计实例76
6.2.2 MapReduce执行过程77
6.2.3 MapReduce的文件切片Split77
6.2.4 Map过程和Reduce过程78
6.2.5 Shuffle过程78
6.3 MapReduce实例79
6.3.1 WordCount本地测试实例79
6.3.2 ETL本地测试实例84
6.4 温度排序实例86
6.4.1 时间和温度的封装类MyKey.Java87
6.4.2 Map任务MyMapper.java88
6.4.3 数据分组类MyGroup.Java89
6.4.4 温度排序类MySort.java89
6.4.5 数据分区MyPartitioner.java90
6.4.6 Reducer任务MyReducer.java90
6.4.7 主函数RunJob.java91
6.5 小结94
第7章 Hadoop的集群资源管理系统——YARN95
7.1 为什么要使用YARN95
7.2 YARN的基本架构96
7.2.1 ResourceManager进程96
7.2.2 ApplicationMaster和NodeManager97
7.3 YARN工作流程97
7.4 YARN搭建98
7.5 小结100
第8章 Hadoop的数据仓库框架——Hive101
8.1 Hive的理论基础101
8.1.1 什么是Hive101
8.1.2 Hive和数据库的异同102
8.1.3 Hive设计的目的与应用104
8.1.4 Hive的运行架构104
8.1.5 Hive的执行流程105
8.1.6 Hive服务106
8.1.7 元数据存储Metastore106
8.1.8 Embedded模式107
8.1.9 Local模式108
8.1.10 Remote模式109
8.2 Hive的配置与安装109
8.2.1 安装MySQL110
8.2.2 配置Hive112
8.3 Hive表的操作113
8.3.1 创建Hive表114
8.3.2 导入数据114
8.4 表的分区与分桶115
8.4.1 表的分区115
8.4.2 表的分桶117
8.5 内部表与外部表118
8.5.1 内部表119
8.5.2 外部表119
8.6 内置函数与自定义函数121
8.6.1 内置函数实例121
8.6.2 自定义UDAF函数实例123
8.7 通过Java访问Hive124
8.8 Hive优化125
8.8.1 MapReduce优化126
8.8.2 配置优化126
8.9 小结127
第9章 大数据快速读写——HBase128
9.1 关于NoSQL128
9.1.1 什么是NoSQL128
9.1.2 NoSQL数据库的分类129
9.1.3 NoSQL数据库的应用129
9.1.4 关系型数据库与非关系型数据库的区别130
9.2 HBase基础130
9.2.1 HBase简介130
9.2.2 HBase数据模型131
9.2.3 HBase体系架构及组件132
9.2.4 HBase执行原理134
9.3 HBase安装135
9.4 HBase的Shell操作138
9.5 Java API访问HBase实例139
9.5.1 创建表139
9.5.2 插入数据140
9.5.3 查询数据141
9.6 小结142
第10章 海量日志采集工具——Flume143
10.1 什么是Flume143
10.2 Flume的特点143
10.3 Flume架构144
10.4 Flume的主要组件144
10.4.1 Event、Client与Agent——数据传输145
10.4.2 Source—Event接收145
10.4.3 Channel—Event传输146
10.4.4 Sink—Event发送147
10.4.5 其他组件148
10.5 Flume安装148
10.6 Flume应用典型实例149
10.6.1 本地数据读取(conf1)149
10.6.2 收集至HDFS150
10.6.3 基于日期分区的数据收集152
10.7 通过exec命令实现数据收集153
10.7.1 安装工具153
10.7.2 编辑配置文件conf4155
10.7.3 运行Flume156
10.7.4 查看生成的文件156
10.7.5 查看HDFS中的数据157
10.8 小结158
第11章 Hadoop和关系型数据库间的数据传输工具——Sqoop159
11.1 什么是Sqoop159
11.2 Sqoop工作机制159
11.3 Sqoop的安装与配置161
11.3.1 下载Sqoop161
11.3.2 Sqoop配置162
11.4 Sqoop数据导入实例163
11.4.1 向HDFS中导入数据165
11.4.2 将数据导入Hive167
11.4.3 向HDFS中导入查询结果170
11.5 Sqoop数据导出实例172
11.6 小结173
第12章 分布式消息队列——Kafka174
12.1 什么是Kafka174
12.2 Kafka的架构和主要组件174
12.2.1 消息记录的类别名——Topic175
12.2.2 Producer与Consumer——数据的生产和消费176
12.2.3 其他组件——Broker、Partition、Offset、Segment177
12.3 Kafka的下载与集群安装177
12.3.1 安装包的下载与解压177
12.3.2 Kafka的安装配置178
12.4 Kafka应用实例181
12.4.1 Producer实例181
12.4.2 Consumer实例182
12.5 小结184
第13章 开源的内存数据库——Redis185
13.1 Redis简介185
13.1.1 什么是Redis185
13.1.2 Redis的特点186
13.2 Redis安装与配置186
13.3 客户端登录187
13.3.1 密码为空登录187
13.3.2 设置密码登录188
13.4 Redis的数据类型188
13.4.1 String类型188
13.4.2 List类型190
13.4.3 Hash类型191
13.4.4 Set类型194
13.5 小结197
第14章 Ambari和CDH198
14.1 Ambari的安装与集群管理198
14.1.1 认识HDP与Ambari198
14.1.2 Ambari的搭建199
14.1.3 配置网卡与修改本机名199
14.1.4 定义DNS服务器与修改hosts主机映射关系200
14.1.5 关闭防火墙并安装JDK200
14.1.6 升级OpenSSL安全套接层协议版本201
14.1.7 关闭SELinux的强制访问控制201
14.1.8 SSH免密码登录202
14.1.9 同步NTP202
14.1.10 关闭Linux的THP服务204
14.1.11 配置UMASK与HTTP服务204
14.1.12 安装本地源制作相关工具与Createrepo205
14.1.13 禁止离线更新与制作本地源205
14.1.14 安装Ambari-server与MySQL208
14.1.15 安装Ambari210
14.1.16 安装Agent与Ambari登录安装211
14.1.17 安装部署问题解决方案214
14.2 CDH的安装与集群管理216
14.2.1 什么是CDH和Cloudera Manager介绍216
14.2.2 Cloudera Manager与Ambari对比的优势216
14.2.3 CDH安装和网卡配置217
14.2.4 修改本机名与定义DNS服务器217
14.2.5 修改hosts主机映射关系218
14.2.6 关闭防火墙218
14.2.7 安装JDK219
14.2.8 升级OpenSSL安全套接层协议版本219
14.2.9 禁用SELinux的强制访问功能220
14.2.10 SSH 免密码登录220
14.2.11 同步NTP安装220
14.2.12 安装MySQL222
14.2.13 安装Cloudera Manager222
14.2.14 添加MySQL驱动包和修改Agent配置223
14.2.15 初始化CM5数据库和创建cloudera-scm用户223
14.2.16 准备Parcels223
14.2.17 CDH的安装配置224
14.3 小结227
第15章 快速且通用的集群计算系统——Spark228
15.1 Spark基础知识228
15.1.1 Spark的特点228
15.1.2 Spark和Hadoop的比较229
15.2 弹性分布式数据集RDD230
15.2.1 RDD的概念230
15.2.2 RDD的创建方式230
15.2.3 RDD的操作230
15.2.4 RDD的执行过程231
15.3 Spark作业运行机制232
15.4 运行在YARN上的Spark233
15.4.1 在YARN上运行Spark233
15.4.2 Spark在YARN上的两种部署模式233
15.5 Spark集群安装234
15.5.1 Spark安装包的下载234
15.5.2 Spark安装环境236
15.5.3 Scala安装和配置236
15.5.4 Spark分布式集群配置238
15.6 Spark实例详解241
15.6.1 网站用户浏览次数最多的URL统计241
15.6.2 用户地域定位实例243
15.7 小结246
第3篇 Hadoop项目案例实战
第16章 基于电商产品的大数据业务分析系统实战248
16.1 项目背景、实现目标和项目需求248
16.2 功能与流程249
16.2.1 用户信息250
16.2.2 商品信息251
16.2.3 购买记录251
16.3 数据收集252
16.3.1 Flume的配置文件252
16.3.2 启动Flume253
16.3.3 查看采集后的文件253
16.3.4 通过后台命令查看文件254
16.3.5 查看文件内容255
16.3.6 上传user.list文件256
16.3.7 上传brand.list目录256
16.4 数据预处理257
16.5 数据分析——创建外部表261
16.6 建立模型264
16.6.1 各年龄段用户消费总额264
16.6.2 查询各品牌销售总额265
16.6.3 查询各省份消费总额266
16.6.4 使用Sqoop将数据导入MySQL数据库266
16.7 数据可视化268
16.8 小结272
第17章 用户画像分析实战273
17.1 项目背景273
17.2 项目目标与项目开发过程274
17.2.1 数据采集274
17.2.2 数据预处理275
17.2.3 模型构建275
17.2.4 数据分析276
17.3 核心代码解读277
17.3.1 项目流程介绍277
17.3.2 核心类的解读278
17.3.3 core-site.xml配置文件279
17.3.4 hdfs-site.xml配置文件279
17.3.5 UserProfile.properties配置文件280
17.3.6 LoadConfig.java:读取配置信息280
17.3.7 ReadFile.java:读取文件281
17.3.8 ReadFromHdfs.java:提取信息281
17.3.9 UserProfile.java:创建用户画像282
17.3.10 TextArrayWritable.java:字符串处理工具类285
17.3.11 MapReduce任务1:UserProfileMapReduce.java285
17.3.12 MapReduce任务2:UserProfileMapReduce2.java289
17.3.13 UserProfilePutInHbaseMap.java:提取用户画像291
17.3.14 UserProfilePutInHbaseReduce:存储用户画像292
17.4 项目部署293
17.5 小结294
第18章 基于个性化的视频推荐系统实战295
18.1 项目背景295
18.2 项目目标与推荐系统简介295
18.2.1 推荐系统的分类295
18.2.2 推荐模型的构建流程296
18.2.3 推荐系统核心算法297
18.2.4 如何基于Mahout框架完成商品推荐300
18.2.5 基于Mahout框架的商品推荐实例300
18.3 推荐系统项目架构302
18.4 推荐系统模型构建303
18.5 核心代码304
18.5.1 公共部分305
18.5.2 离线部分307
18.5.3 在线部分311
18.6 小结314
第19章 电信离网用户挽留实战315
19.1 商业理解315
19.2 数据理解316
19.2.1 收集数据316
19.2.2 了解数据317
19.2.3 保证数据质量318
19.3 数据整理318
19.3.1 数据整合318
19.3.2 数据过滤319
19.4 数据清洗319
19.4.1 噪声识别320
19.4.2 离群值和极端值的定义321
19.4.3 离群值处理方法321
19.4.4 数据空值处理示例323
19.5 数据转换324
19.5.1 变量转换324
19.5.2 压缩分类水平数324
19.5.3 连续数据离散化325
19.5.4 变换哑变量326
19.5.5 数据标准化326
19.5.6 数据压缩326
19.6 建模327
19.6.1 决策树算法概述327
19.6.2 决策树的训练步骤327
19.6.3 训练决策树328
19.6.4 C4.5算法329
19.6.5 决策树剪枝332
19.7 评估335
19.7.1 混淆矩阵335
19.7.2 ROC曲线336
19.8 部署338
19.9 用户离网案例代码详解339
19.9.1 数据准备339
19.9.2 相关性分析341
19.9.3 最终建模342
19.9.4 模型评估343
19.10 小结346