栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive优化:Explain执行计划应该怎么看?

Hive优化:Explain执行计划应该怎么看?

Hive优化:Explain执行计划

内容目录

Hive优化:Explain执行计划

一:Explain执行计划二:Explain的语法三:Explain的用法四、图示Explain执行计划

一:Explain执行计划

想要做好hive优化,你可以启用一些hive配置,压缩文件等等,但是羊毛出在羊身上,硬件配置好了,写了一个无敌菜sql,任凭你的配置再好,也不能顶得住sql的毁灭打击啊

所以就要了解一下sql的执行计划了,所谓sql执行计划,就是描绘出了这段sql的运行情况,有多少mr,有几个阶段,每个阶段干了什么,怎么join的,怎么分组的,怎么排序的,等等,根据这些执行计划,让你可以检索出bad代码,做出好的优化

二:Explain的语法

我们可以使用Explain查看sql的执行计划,使用方法

explain query;

直接explain后跟上你的sql语句即可

三:Explain的用法

出来了结果我们肯定要会看呢,比如执行下面一行简单的sql

select 
  t1.*
  ,t2.* 
from t1 
join t2 
on t1.name=t2.name;

很简单的一个sql,只涉及了一个join,那么看一下他的执行计划

explain select t1.*,t2.* from t1 join t2 on t1.name=t2.name;

结果:

Explain
STAGE DEPENDENCIES:
  Stage-2 is a root stage
  Stage-1 depends on stages: Stage-2
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-2
    Spark
      DagName: lnnu_20220323190211_98dbabe0-52c5-42d1-b54c-431e36f7ee82:5
      Vertices:
        Map 2 
            Map Operator Tree:
                TableScan
                  alias: t2
                  Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                  Filter Operator
                    predicate: name is not null (type: boolean)
                    Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                    Select Operator
                      expressions: name (type: string), age (type: int)
                      outputColumnNames: _col0, _col1
                      Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                      Spark HashTable Sink Operator
                        keys:
                          0 _col0 (type: string)
                          1 _col0 (type: string)
            Execution mode: vectorized
            Local Work:
              Map Reduce Local Work

  Stage: Stage-1
    Spark
      DagName: lnnu_20220323190211_98dbabe0-52c5-42d1-b54c-431e36f7ee82:4
      Vertices:
        Map 1 
            Map Operator Tree:
                TableScan
                  alias: t1
                  Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                  Filter Operator
                    predicate: name is not null (type: boolean)
                    Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                    Select Operator
                      expressions: name (type: string), age (type: int)
                      outputColumnNames: _col0, _col1
                      Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                      Map Join Operator
                        condition map:
                             Inner Join 0 to 1
                        keys:
                          0 _col0 (type: string)
                          1 _col0 (type: string)
                        outputColumnNames: _col0, _col1, _col2, _col3
                        input vertices:
                          1 Map 2
                        Statistics: Num rows: 3 Data size: 23 Basic stats: COMPLETE Column stats: NONE
                        File Output Operator
                          compressed: false
                          Statistics: Num rows: 3 Data size: 23 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
            Execution mode: vectorized
            Local Work:
              Map Reduce Local Work

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

看到上面的内容蒙圈吗?别担心,一行行看

首先

Explain
STAGE DEPENDENCIES:
  Stage-2 is a root stage
  Stage-1 depends on stages: Stage-2
  Stage-0 depends on stages: Stage-1

这个说明了有三个阶段,stage-2是开始的节点,stage-1依赖于stage-2,stage-0依赖于stage-1

往下:

STAGE PLANS:
  Stage: Stage-2
    Spark
      DagName: lnnu_20220323190211_98dbabe0-52c5-42d1-b54c-431e36f7ee82:5
      Vertices:
        Map 2 
            Map Operator Tree:
                TableScan
                  alias: t2
                  Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                  Filter Operator
                    predicate: name is not null (type: boolean)
                    Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                    Select Operator
                      expressions: name (type: string), age (type: int)
                      outputColumnNames: _col0, _col1
                      Statistics: Num rows: 3 Data size: 21 Basic stats: COMPLETE Column stats: NONE
                      Spark HashTable Sink Operator
                        keys:
                          0 _col0 (type: string)
                          1 _col0 (type: string)
            Execution mode: vectorized
            Local Work:
              Map Reduce Local Work

因为这里的hive引擎我改成了spark,如果引擎是mr,那么就会显示map和reduce

以下是对参数的一些说明,来源于https://mp.weixin.qq.com/s/3483ib06DFQfhLFOZAv_jA,详细的可以参考

    TableScan:表扫描操作,map端第一个操作肯定是加载表,所以就是表扫描操作,常见的属性:

    alias:表名称Statistics:表统计信息,包含表中数据条数,数据大小等

    Select Operator:选取操作,常见的属性 :

    expressions:需要的字段名称及字段类型outputColumnNames:输出的列名称Statistics:表统计信息,包含表中数据条数,数据大小等

    Group By Operator:分组聚合操作,常见的属性:

    aggregations:显示聚合函数信息mode:聚合模式,值有 hash:随机聚合,就是hash partition;partial:局部聚合;final:最终聚合keys:分组的字段,如果没有分组,则没有此字段outputColumnNames:聚合之后输出列名Statistics:表统计信息,包含分组聚合之后的数据条数,数据大小等

    Reduce Output Operator:输出到reduce操作,常见属性:

    sort order:值为空 不排序;值为 + 正序排序,值为 - 倒序排序;值为 ± 排序的列为两列,第一列为正序,第二列为倒序

    Filter Operator:过滤操作,常见的属性:

    predicate:过滤条件,如sql语句中的where id>=1,则此处显示(id >= 1)

    Map Join Operator:join 操作,常见的属性:

    condition map:join方式 ,如Inner Join 0 to 1 Left Outer Join0 to 2keys: join 的条件字段outputColumnNames:join 完成之后输出的字段Statistics:join 完成之后生成的数据条数,大小等

    File Output Operator:文件输出操作,常见的属性

    compressed:是否压缩table:表的信息,包含输入输出文件格式化方式,序列化方式等

    Fetch Operator 客户端获取数据操作,常见的属性:

    limit,值为 -1 表示不限制条数,其他值为限制的条数

四、图示Explain执行计划

最后我用图标注了每行的意思,可以作为参考

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775015.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号