关于大数据:Hive性能调优工具

41次阅读

共计 3341 个字符,预计需要花费 9 分钟才能阅读完成。

HQL 提供了两个查看查问性能的工具:explainanalyze,除此之外 Hive 的日志也提供了十分具体的信息,不便查看执行性能和报错排查。

工具一:explain

explain 语句是查看执行打算常常应用的一个工具,能够应用该语句剖析查问执行打算,具体应用语法如下:

EXPLAIN [FORMATTED|EXTENDED|DEPENDENCY|AUTHORIZATION] hql_query 

其中,关键字的含意:

  • FORMATTED:对执行打算进行格式化,返回 JSON 格局的执行打算
  • EXTENDED:提供一些额定的信息,比方文件的门路信息
  • DEPENDENCY:以 JSON 格局返回查问所依赖的表和分区的列表,从 Hive0.10 开始应用,如下图
  • AUTHORIZATION:列出须要被受权的条目,包含输出与输入,从 Hive0.14 开始应用, 如下图

一个典型的查问执行打算次要包含三局部,具体如下:

  • 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 表名. 列名;

理解更多

正文完
 0