本书是一本关于Apache Hive调优的书籍,旨在介绍如何进行Hive的调优,以及调优时如果使用的工具。本书在*开始会介绍Hive优化多面性,以及如何在众多的调优技巧中寻找一条调优的思路。接着介绍Hive安装,为了方便读者的练习,我们主要介绍Docker安装Hive的方式和使用cloudera提供工具Hive的方式。介绍完安装Hive方式,我们会继续介绍Hive在优化时涉及的Hadoop组件和Hive工具。*后会介绍如何监控Hive在运行时出现性能问题。本书适合对大数据开发感兴趣的爱好者、对Hive优化有兴趣的人员使用。
前言
第1章 举例感受Hive性能调优的多样性1
1.1 感受改写SQL对性能的影响1
1.1.1 数据准备1
1.1.2 union案例4
1.1.3 改写SQL实现union的优化5
1.1.4 失败的union调优8
1.2 感受调整数据块大小对性能的影响10
1.2.1 数据准备11
1.2.2 案例比较11
1.3 感受不同数据格式对性能的提升15
1.3.1 数据准备15
1.3.2 案例比较16
1.4 感受不同的表设计对性能的影响18
1.4.1 数据准备19
1.4.2 案例比较21
1.5 调优其实不难24
第2章 Hive问题排查与调优思路25
2.1 小白推演Hive的优化方法25
2.1.1 类比关系型数据库的调优25
2.1.2 学习大数据分布式计算的基本原理28
2.1.3 学习使用YARN提供的日志31
2.1.4 干预SQL的运行方式33
2.2 老工对Hive的调优理解36
2.2.1 从一个过度优化案例说起36
2.2.2 编码和调优的原则43
2.2.3 Hive程序相关规范49
2.3 总结调优的一般性过程51
第3章 环境搭建53
3.1 Docker基础53
3.1.1 Docker介绍54
3.1.2 安装Docker56
3.1.3 常见的Docker使用与管理命令58
3.1.4 使用Dockerfile构建服务镜像60
3.1.5 Dockerfile语法63
3.2 Cloudera Docker搭建伪分布式环境66
3.3 Docker搭建分布式集群68
3.3.1 构建JDK镜像69
3.3.2 构建Hadoop镜像70
3.3.3 构建Hive镜像72
3.3.4 启动集群73
3.4 CDM搭建分布式集群75
3.4.1 Cloudera Manager组件75
3.4.2 Docker构建软件安装内部源76
3.4.3 CDM安装分布式集群79
3.5 使用GitHub开源项目构建集群87
第4章 Hive及其相关大数据组件89
4.1 Hive架构89
4.1.1 Hive 1.x版本基本结构89
4.1.2 Hive元数据91
4.2 YARN组件97
4.2.1 YARN的优点97
4.2.2 YARN基本组成97
4.2.3 YARN工作流程99
4.2.4 YARN资源调度器100
4.3 HDFS架构102
4.3.1 常见HDFS优化102
4.3.2 HDFS基本架构和读写流程103
4.3.3 HDFS高可用架构105
4.3.4 NameNode联盟107
4.4 计算引擎109
4.4.1 MapReduce计算引擎109
4.4.2 Tez计算引擎111
4.4.3 LLAP长时在线与处理程序113
4.4.4 Spark计算引擎115
第5章 深入MapReduce计算引擎117
5.1 MapReduce整体处理过程117
5.2 MapReduce作业输入118
5.2.1 输入格式类InputFormat118
5.2.2 InputFormat在Hive中的使用120
5.3 MapReduce的Mapper121
5.3.1 Mapper类121
5.3.2 Hive中与Mapper相关的配置123
5.4 MapReduce的Reducer125
5.4.1 Reducer类126
5.4.2 Hive中与Reducer相关的配置127
5.5 MapReduce的Shuffle128
5.6 MapReduce的Map端聚合129
5.6.1 Combiner类129
5.6.2 Map端的聚合与Hive配置130
5.7 MapReduce作业输出131
5.7.1 OutputFormat作业输出132
5.7.2 Hive配置与作业输出133
5.8 MapReduce作业与Hive配置134
5.9 MapReduce与Tez对比135
5.9.1 通过案例代码对比MapReduce和Tez135
5.9.2 Hive中Tez和LLAP相关的配置141
第6章 HiveSQL执行计划143
6.1 查看SQL的执行计划143
6.1.1 查看执行计划的基本信息144
6.1.2 查看执行计划的扩展信息148
6.1.3 查看SQL数据输入依赖的信息148
6.1.4 查看SQL操作涉及的相关权限信息152
6.1.5 查看SQL的向量化描述信息152
6.2 简单SQL的执行计划解读158
6.3 带普通函数/操作符SQL的执行计划解读161
6.3.1 执行计划解读161
6.3.2 普通函数和操作符162
6.4 带聚合函数的SQL执行计划解读164
6.4.1 在Reduce阶段聚合的SQL164
6.4.2 在Map和Reduce阶段聚合的SQL167
6.4.3 高级分组聚合169
6.5 带窗口/分析函数的SQL执行计划解读172
6.6 表连接的SQL执行计划解读175
6.6.1 Hive表连接的类型175
6.6.2 内连接和外连接176
6.6.3 左半连接178
第7章 Hive数据处理模式181
7.1 过滤模式181
7.1.1 where子句过滤模式182
7.1.2 having子句过滤183
7.1.3 distinct子句过滤184
7.1.4 表过滤186
7.1.5 分区过滤188
7.1.6 分桶过滤189
7.1.7 索引过滤191
7.1.8 列过滤191
7.2 聚合模式192
7.2.1 distinct模式193
7.2.2 count(列)、count(*)、count(1)行计数聚合模式194
7.2.3 可计算中间结果的聚合模式197
7.2.4 不可计算中间结果的聚合模式199
7.3 连接模式200
7.3.1 普通Map连接201
7.3.2 桶的Map连接和排序合并桶的Map连接207
7.3.3 倾斜连接209
7.3.4 表连接与基于成本的优化器210
第8章 YARN日志212
8.1 查看YARN日志的方式212
8.1.1 ResourceManager Web UI界面212
8.1.2 JobHistory Web UI界面215
8.2 快速查看集群概况216
8.2.1 Cluster Metrics集群度量指标217
8.2.2 Cluster Node Metrics集群节点的度量信息218
8.2.3 Cluster Overview集群概况220
8.3 查看集群节点概况221
8.3.1 节点列表概况221
8.3.2 节点详细信息223
8.3.3 节点作业信息224
8.4 查看集群的队列调度情况226
8.5 查看集群作业运行信息230
8.5.1 集群作业运行状态230
8.5.2 查看作业运行的基本信息231
8.5.3 查看作业计数器232
第9章 数据存储236
9.1 文件存储格式之Apache ORC236
9.1.1 ORC的结构237
9.1.2 ORC的数据类型238
9.1.3 ACID事务的支持240
9.2 与ORC相关的Hive配置241
9.2.1 表配置属性241
9.2.2 Hive表的配置属性241
9.3 文件存储格式之Apache Parquet242
9.3.1 Parquet基本结构243
9.3.2 Parquet的相关配置245
9.4 数据归档245
第10章 发现并优化Hive中的性能问题247
10.1 监控Hive数据库的状态247
10.2 监控当前集群状态253
10.3 定位性能瓶颈258
10.3.1 使用HS2 WebUI排除非大数据组件的问题258
10.3.2 排查长时等待调度260
10.3.3 Map任务读取小文件和大文件261
10.3.4 Reduce的数据倾斜262
10.3.5 缓慢的Shuffle264
10.3.6 集群资源的限制265
10.4 数据倾斜266
10.4.1 不可拆分大文件引发的数据倾斜266
10.4.2 业务无关的数据引发的数据倾斜267
10.4.3 多维聚合计算数据膨胀引起的数据倾斜268
10.4.4 无法削减中间结果的数据量引发的数据倾斜268
10.4.5 两个Hive数据表连接时引发的数据倾斜269
第11章 Hive知识体系总结270
11.1 Hive知识体系270
11.2 数据粒度271
11.3 SQL相关275
11.3.1 select查询语句276
11.3.2 数据定义语言(DDL)276
11.3.3 数据控制语言(DML)279
11.3.4 用户自定义函数(UDF)280
11.4 文件操作281