Skip to content

Hive基础优化

1. 计算资源配置

本笔记的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。

1.1 Yarn资源配置

需要调整$HADOOP_HOME/etc/hadoop/yarn-site.xml文件相关参数,里面都是Yarn参数,主要设置与CPU、内存等资源有关,核心配置参数如下:

  1. yarn.nodemanager.resource.memory-mb
    该参数的含义是,一个NodeManager节点分配给Container使用的内存。该参数的配置,取决于NodeManager所在节点的总内存容量和该节点运行的其他服务的数量。
xml
<!-- 该参数若设置为64G,结合自身服务器来 -->
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>65536</value>
</property>
  1. yarn.nodemanager.resource.cpu-vcores 该参数的含义是,一个NodeManager节点分配给Container使用的CPU核数。该参数的配置,同样取决于NodeManager所在节点的总CPU核数和该节点运行的其他服务。
xml
<!-- 该参数若设置为16 -->
<property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>16</value>
</property>
  1. yarn.scheduler.maximum-allocation-mb 该参数的含义是,单个Container能够使用的最大内存。推荐配置如下:
xml
<property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>16384</value>
</property>
  1. yarn.scheduler.minimum-allocation-mb 该参数的含义是,单个Container能够使用的最小内存,推荐配置如下:
xml
<property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>512</value>
</property>

1.2 MapReduce资源配置

MapReduce资源配置主要包括Map Task的内存和CPU核数,以及Reduce Task的内存和CPU核数。核心配置参数如下:

  1. mapreduce.map.memory.mb 该参数的含义是,单个Map Task申请的container容器内存大小,其默认值为1024。该值不能超出yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb规定的范围。
    该参数需要根据不同的计算任务单独进行配置,在hive中,可直接使用如下方式为每个SQL语句单独进行配置:
sql
set mapreduce.map.memory.mb=2048;
  1. mapreduce.map.cpu.vcores 该参数的含义是,单个Map Task申请的container容器cpu核数,其默认值为1。该值一般无需调整。
  2. mapreduce.reduce.memory.mb 该参数的含义是,单个Reduce Task申请的container容器内存大小,其默认值为1024。该值同样不能超出yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb规定的范围。
    该参数需要根据不同的计算任务单独进行配置,在hive中,可直接使用如下方式为每个SQL语句单独进行配置:
sql
set mapreduce.reduce.memory.mb=2048;
  1. mapreduce.reduce.cpu.vcores 该参数的含义是,单个Reduce Task申请的container容器cpu核数,其默认值为1。该值一般无需调整。
    可以通过以下步骤知道实际MR任务所需内存大小,提供配置指导性建议:
    查看Map任务顶峰所耗内存图

2. Explain查看执行计划

2.1 Explain执行计划概述

Explain呈现的执行计划,由一系列Stage组成,这一系列Stage具有依赖关系,每个Stage对应一个MapReduce Job,或者一个文件系统操作等。
若某个Stage对应的一个MapReduce Job,其Map端和Reduce端的计算逻辑分别由Map Operator Tree和Reduce Operator Tree进行描述,Operator Tree由一系列的Operator组成,一个Operator代表在Map或Reduce阶段的一个单一的逻辑操作,例如TableScan Operator,Select Operator,Join Operator等。
下图是由一个执行计划绘制而成:
Alt text 常见的Operator及其作用如下:

  • TableScan:表扫描操作,通常map端第一个操作肯定是表扫描操作
  • Select Operator:选取操作
  • Group By Operator:分组聚合操作
  • Reduce Output Operator:输出到 reduce 操作
  • Filter Operator:过滤操作
  • Join Operator:join 操作
  • File Output Operator:文件输出操作
  • Fetch Operator 客户端获取数据操作

2.2 基本语法

sql
EXPLAIN [FORMATTED | EXTENDED | DEPENDENCY] query-sql

注:FORMATTED、EXTENDED、DEPENDENCY关键字为可选项,各自作用如下:

  • FORMATTED:将执行计划以JSON字符串的形式输出
  • EXTENDED:输出执行计划中的额外信息,通常是读写的文件名等信息
  • DEPENDENCY:输出执行计划读取的表及分区
    Alt text 本文提供可视化分析Hive执行计划UI,可访问Hive执行计划可视化,页面中只需要传入执行计划的json内容即可。
    Alt text 比如以下SQL需要分析:
sql
select
    *
from order_detail
join province_info
where order_detail.province_id='2';

分析该SQL的执行计划:
Alt text 复制进去自动显示执行计划过程:
Alt text