本书是一本关于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