Hive Explain(翻譯自Hive wiki)


EXPLAIN語法

Hive提供EXPLAIN命令,顯示查詢的執行計划。語法如下:

EXPLAIN [EXTENDED] query

EXPLAIN語句使用EXTENDED,提供執行計划關於操作的額外的信息。這是典型的物理信息,如文件名。

Hive查詢被轉換成序列(這是一個有向無環圖)階段。這些階段可能是mapper/reducer階段,或者做metastore或文件系統的操作,如移動和重命名的階段。 EXPLAIN的輸出包括三個部分:

查詢的抽象語法樹

執行計划計划的不同階段之間的依賴關系

每個場景的描述

場景的描述,顯示了與元數據相關操作的操作序列。元數據會包括FilterOperator的過濾器表達式,或SelectOperator的查詢表達式,或FileSinkOperator的文件輸出名字。

 

例子

考慮下面的EXPLAIN查詢:

EXPLAIN
FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;

語句的輸出包含下面的部分

抽象語法樹

ABSTRACT SYNTAX TREE:
  (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))

 

依賴圖

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

這顯示,Stage-1是根階段,Stage-2在Stage-1完成后執行,Stage-0在Stage-2完成后執行。

 

每個階段的計划

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Alias -> Map Operator Tree:
        src
            Reduce Output Operator
              key expressions:
                    expr: key
                    type: string
              sort order: +
              Map-reduce partition columns:
                    expr: rand()
                    type: double
              tag: -1
              value expressions:
                    expr: substr(value, 4)
                    type: string
      Reduce Operator Tree:
        Group By Operator
          aggregations:
                expr: sum(UDFToDouble(VALUE.0))
          keys:
                expr: KEY.0
                type: string
          mode: partial1
          File Output Operator
            compressed: false
            table:
                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                output format: org.apache.hadoop.mapred.SequenceFileOutputFormat
                name: binary_table

  Stage: Stage-2
    Map Reduce
      Alias -> Map Operator Tree:
        /tmp/hive-zshao/67494501/106593589.10001
          Reduce Output Operator
            key expressions:
                  expr: 0
                  type: string
            sort order: +
            Map-reduce partition columns:
                  expr: 0
                  type: string
            tag: -1
            value expressions:
                  expr: 1
                  type: double
      Reduce Operator Tree:
        Group By Operator
          aggregations:
                expr: sum(VALUE.0)
          keys:
                expr: KEY.0
                type: string
          mode: final
          Select Operator
            expressions:
                  expr: 0
                  type: string
                  expr: 1
                  type: double
            Select Operator
              expressions:
                    expr: UDFToInteger(0)
                    type: int
                    expr: 1
                    type: double
              File Output Operator
                compressed: false
                table:
                    input format: org.apache.hadoop.mapred.TextInputFormat
                    output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
                    serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe
                    name: dest_g1

  Stage: Stage-0
    Move Operator
      tables:
            replace: true
            table:
                input format: org.apache.hadoop.mapred.TextInputFormat
                output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe
                name: dest_g1

這個例子,有2個map/reduce階段(Stage-1和Stage-2),還有一個文件系統相關階段(Stage-0).Stage-0簡單把結果從臨時目錄,移動到表dest_g1相關的目錄。

 

map/reduce階段包含2部分:

map/reduce場景本身包含2個部分:表映射到Map運算符樹的別名--這個映射,通知mapper運算符樹調用,處理特定表的行或先前的map/reduce階段的結果。在上面例子的Stage-1,原始表的行,被Reduce輸出運算符的運算符樹處理。類似,在Stage-2中,Stage-1的結果的行被Reduce輸出運算符的其他運算符樹處理。每個Reduce輸出操作符,根據元數據的標准,把數據分區到reducers。

Reduce操作符樹——這個操作符樹處理map/reduce任務的reducer的所有行。在例子的Stage-1,Reducer操作符樹開展局部聚合,而Stage-2的reduers操作符樹對Stage-1的局部聚合,做最終的聚合的計算。

 翻譯自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM