Hive性能调优工具

简介: HQL提供了两个查看查询性能的工具:explain与analyze,除此之外Hive的日志也提供了非常详细的信息,方便查看执行性能和报错排查。

HQL提供了两个查看查询性能的工具:explain与analyze,除此之外Hive的日志也提供了非常详细的信息,方便查看执行性能和报错排查。

工具一:explain

explain语句是查看执行计划经常使用的一个工具,可以使用该语句分析查询执行计划,具体使用语法如下:

EXPLAIN [FORMATTED|EXTENDED|DEPENDENCY|AUTHORIZATION] hql_query

其中,关键字的含义:
• FORMATTED:对执行计划进行格式化,返回JSON格式的执行计划
• EXTENDED:提供一些额外的信息,比如文件的路径信息
• DEPENDENCY:以JSON格式返回查询所依赖的表和分区的列表,从Hive0.10开始使用,如下图
image.png
• AUTHORIZATION:列出需要被授权的条目,包括输入与输出,从Hive0.14开始使用,如下图
image.png

一个典型的查询执行计划主要包括三部分,具体如下:
• Abstract Syntax Tree (AST):抽象语法树,Hive使用一个称之为antlr的解析生成器,可以自动地将HQL生成为抽象语法树
• Stage Dependencies:会列出运行查询所有的依赖以及stage的数量
• Stage Plans:包含了非常重要的信息,比如运行作业时的operator 和sort orders
比如:

EXPLAIN
SELECT cc_call_center_id,
       count(*)
FROM tpcds_bin_partitioned_parquet_30.call_center
WHERE cc_call_center_sk = 2
GROUP BY cc_call_center_id
LIMIT 2;

查看执行计划:

STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1
STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: call_center
            filterExpr: (cc_call_center_sk = 2) (type: boolean)
            Statistics: Num rows: 6 Data size: 186 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: (cc_call_center_sk = 2) (type: boolean)
              Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
              Select Operator
                expressions: cc_call_center_id (type: string)
                outputColumnNames: cc_call_center_id
                Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
                Group By Operator
                  aggregations: count()
                  keys: cc_call_center_id (type: string)
                  mode: hash
                  outputColumnNames: _col0, _col1
                  Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
                  Reduce Output Operator
                    key expressions: _col0 (type: string)
                    sort order: +
                    Map-reduce partition columns: _col0 (type: string)
                    Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
                    TopN Hash Memory Usage: 0.1
                    value expressions: _col1 (type: bigint)
      Reduce Operator Tree:
        Group By Operator
          aggregations: count(VALUE._col0)
          keys: KEY._col0 (type: string)
          mode: mergepartial
          outputColumnNames: _col0, _col1
          Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
          Limit
            Number of rows: 2
            Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
            File Output Operator
              compressed: false
              Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
              table:
                  input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                  output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
  Stage: Stage-0
    Fetch Operator
      limit: 2
      Processor Tree:
        ListSink

其中包含了STAGE DEPENDENCIES、STAGE PLANS、Map Operator Tree和Reduce Operator Tree就是抽象语法树部分,STAGE DEPENDENCIES包含两个stage,其中Stage-1是根stage,Stage-0依赖与Stage-1,STAGE PLANS中Stage-1用于计算,Stage-0只是用于拉取数据。

工具二:analyze

analyze语句可以收集一些详细的统计信息,比如表的行数、文件数、数据的大小等信息。这些统计信息作为元数据存储在hive的元数据库中。Hive支持表、分区和列级别的统计(与Impala类似),这些信息作为Hive基于成本优化策略(Cost-Based Optimizer (CBO))的输入,该优化器的主要作用是选择耗费最小系统资源的查询计划。其实,在Hive3.2.0版本中,可以自动收集这些统计信息,当然也可以通过analyze语句进行手动统计表、分区或者字段的信息。具体的使用方式如下:
1.收集表的统计信息(非分区表),当指定NOSCAN关键字时,会忽略扫描文件内容,仅仅统计文件的数量与大小,速度会比较快
ANALYZE TABLE 表名 COMPUTE STATISTICS;
ANALYZE TABLE 表名 COMPUTE STATISTICS NOSCAN;
2.收集分区表的统计信息
ANALYZE TABLE 表名 PARTITION(分区1,分区2) COMPUTE STATISTICS;
收集指定分区信息
ANALYZE TABLE 表名 PARTITION(分区1='xxx',分区2='yyy') COMPUTE STATISTICS;
3.收集表的某个字段的统计信息
ANALYZE TABLE 表名 COMPUTE STATISTICS FOR COLUMNS 字段名 ;
可以通过设置:SET hive.stats.autogather=true,进行自动收集统计信息,对于INSERT OVERWRITE/INTO操作的表或者分区,可以自动收集统计信息。值得注意的是,LOAD操作不能够自动收集统计信息
一旦这些统计信息收集完毕,可以通过DESCRIBE EXTENDED/FORMATTED语句查询统计信息,具体使用如下:
1、查看一个分区的信息

DESCRIBE FORMATTED 表名 PARTITION(分区1='xxx',分区2='yyy');

2、查看一张表的信息

DESCRIBE FORMATTED 表名;

3、查看表中的字段信息

DESCRIBE FORMATTED 表名.列名;

了解更多大数据运维服务

目录
相关文章
|
SQL 关系型数据库 MySQL
hive数据库操作与sqoop工具的使用
hive数据库操作与sqoop工具的使用
|
SQL 存储 分布式计算
数据仓库工具之Hive的架构原理
数据仓库工具之Hive的架构原理
|
SQL 存储 分布式计算
数仓工具之Hive调优
1、启用Fetch抓取 2、本地模式(调试使用) 3、表的优化 4、合理设置map数以及reduce数 5、JVM重用 6、压缩 7、执行计划
235 0
|
SQL 存储 关系型数据库
CDP中的Hive3系列之Hive性能调优
要将数据从 RDBMS(例如 MySQL)迁移到 Hive,您应该考虑使用带有 Teradata 连接器的 CDP 中的 Apache Sqoop。Apache Sqoop 客户端基于 CLI 的工具在关系数据库和 HDFS 或云对象存储之间批量传输数据。 需要进行提取、转换和加载 (ETL) 过程的遗留系统数据源通常驻留在文件系统或对象存储中。您还可以以分隔文本(默认)或 SequenceFile 格式导入数据,然后将数据转换为 Hive 推荐的 ORC 格式。通常,为了在 Hive 中查询数据,ORC 是首选格式,因为 ORC 提供了性能增强。
442 0
|
SQL 分布式计算 关系型数据库
Hive1/2到Hive3升级规划工具
将集群从 Hive1 /2升级到 Hive3?这包括:CDH5→CDP、CDH6→CDP、HDP2→HDP3 或 HDP2→CDP。这种升级的挑战有多种形式。此工具旨在(多次)在 Hive1/2 环境中运行,以收集有关在尝试升级之前需要解决的“什么”的详细信息。
1119 0
|
SQL Java Apache
一脸懵逼学习Hive的安装(将sql语句翻译成MapReduce程序的一个工具)
Hive只在一个节点上安装即可: 1.上传tar包:这个上传就不贴图了,贴一下上传后的,看一下虚拟机吧: 2.
1625 0
|
SQL 分布式计算 数据库连接
原来MaxCompute还能这么玩系列(2)—— 利用HiveServer2 Proxy实现MaxCompute与Hive生态工具的互通
本文讲述了如何通过HiveServer2 Proxy来实现Hive生态工具与MaxCompute的互通
9556 0
|
SQL 消息中间件 Java
ETL数据导入/导出工具 HData(支持JDBC、Hive、HDFS、HBase、Kafka等)
HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC、Hive、HDFS、HBase、MongoDB、FTP、Http、CSV、Excel、Kafka等)之间数据交换的问题。
2111 0
|
4月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
97 1
|
4月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
74 0