1.查看简单的执行计划(常用)
explain select xxx from xxx;
2.查看详细的执行计划
explain extended select xxx from xxx;
3.语法
explain 【extended】【dependency】【authorization】 query-sql
2、分区、分桶、指定存储文件格式、压缩格式
常用文件存储格式: orc+snappy\parquet+lzop\orc+lzop
3、动态分区
需要进行一些设置:
set hive.exec.dynamic.partition=true;开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict;设置为非严格模式
set hive.exec.max.dynamic.partitions=1000;所有mr节点的最大动态分区数
set hive.exec.max.dynamic.partitions.pernode=100;单个mr节点的最大动态分区数
set hive.exec.max.created.files=100000;整个mr任务可以创建的最大hdfs文件数
set hive.error.on.empty.partition=false;设置当有空分区生成时是否要报错
4、语法优化
一、针对单表查询的相关优化:
1.分区裁剪、列裁剪
2.group by
默认情况Map阶段的同一个key数据会分发到同一个reduce,当一个key数据过多时发生数据倾斜。
可以在Map端进行预聚合,有以下参数:
set hive.map.aggr=true;是否在map端进行聚合,默认true
set hive.groupby.mapaggr.checkinterval=100000;在map端进行聚合的数据量
set hive.groupby.skewindate=false;是否在数据倾斜时进行负载均衡,默认false
3.vectorization(矢量计算)
在计算scan、filter、aggregation时可以设置批处理(批量读取1-1024行),参数如下:
set hive.vectorized.execution.enabled=true;默认值false
set hive.vectorized.execution.reduce.enabled=true;
4.多重模式
在有多条sql都是对同一张表进行扫描,只是逻辑不同时,可使用多重模式进行优化:
列如:
insert ... select xxx from a where a.xxx = 'xxx';
...
insert ... select xxx from a where a.xxx = 'xxx';
可以修改为:
from a insert