大數(shù)據(jù)開發(fā)之Hive優(yōu)化篇2-Hive的explain命令

備注:
Hive 版本 2.1.1

一.Hive explain命令概述

Hive的explain命令用來看Hive sql的執(zhí)行計(jì)劃,通過分析執(zhí)行計(jì)劃來達(dá)到優(yōu)化Hive sql的目的热监。

語法:

EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query

Hive查詢被轉(zhuǎn)換成一個(gè)階段序列(它更像是一個(gè)有向非循環(huán)圖)恤筛。這些階段可能是map/reduce階段俱萍,甚至可能是執(zhí)行元存儲或文件系統(tǒng)操作(如移動和重命名)的階段库菲。explain輸出有三部分:

  1. 查詢語句的抽象語法樹(AST)
  2. 執(zhí)行計(jì)劃不同階段間的依賴關(guān)系
  3. 每個(gè)階段的描述

階段本身的描述顯示了一系列操作符以及與操作符關(guān)聯(lián)的元數(shù)據(jù)琐鲁。元數(shù)據(jù)可能包括FilterOperator的過濾表達(dá)式挽拂、SelectOperator的選擇表達(dá)式或FileSinkOperator的輸出文件名惭每。

二.Hive explain 案例

map/reduce階段本身有兩個(gè)部分:
從表別名到映射操作符樹的映射——該映射告訴映射器要調(diào)用哪個(gè)操作符樹來處理來自特定表的行或前一個(gè)Map /reduce階段的結(jié)果。

以一個(gè)簡單的group by語句來看explain的效果:

hive> 
    > explain extended 
    > select t.sale_date ,
    >        t.prod_name ,
    >        sum(t.sale_nums) total_nums
    > from ods_fact_sale t
    > group by t.sale_date,t.prod_name ;
OK
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Spark
      Edges:
        Reducer 2 <- Map 1 (GROUP, 914)
      DagName: root_20201230141411_24e56f4b-fdc1-461f-8ac9-81594cc3b1ad:1
      Vertices:
        Map 1 
            Map Operator Tree:                    //發(fā)生在job的 map 處理階段過程
                TableScan                              //讀取表的數(shù)據(jù)
                  alias: t                                  //讀取表的別名
                  Statistics: Num rows: 767830000 Data size: 30653263662 Basic stats: COMPLETE Column stats: NONE  //表的統(tǒng)計(jì)信息
                  GatherStats: false
                  Select Operator
                    expressions: sale_date (type: string), prod_name (type: string), sale_nums (type: int)
                    outputColumnNames: sale_date, prod_name, sale_nums
                    Statistics: Num rows: 767830000 Data size: 30653263662 Basic stats: COMPLETE Column stats: NONE
                    Group By Operator
                      aggregations: sum(sale_nums)
                      keys: sale_date (type: string), prod_name (type: string)
                      mode: hash
                      outputColumnNames: _col0, _col1, _col2
                      Statistics: Num rows: 767830000 Data size: 30653263662 Basic stats: COMPLETE Column stats: NONE
                      Reduce Output Operator
                        key expressions: _col0 (type: string), _col1 (type: string)
                        null sort order: aa
                        sort order: ++
                        Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
                        Statistics: Num rows: 767830000 Data size: 30653263662 Basic stats: COMPLETE Column stats: NONE
                        tag: -1
                        value expressions: _col2 (type: bigint)
                        auto parallelism: false
            Path -> Alias:
              hdfs://nameservice1/user/hive/warehouse/test.db/ods_fact_sale [t]
            Path -> Partition:
              hdfs://nameservice1/user/hive/warehouse/test.db/ods_fact_sale 
                Partition
                  base file name: ods_fact_sale
                  input format: org.apache.hadoop.mapred.TextInputFormat
                  output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                  properties:
                    COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"id":"true","prod_name":"true","sale_date":"true","sale_nums":"true"}}
                    bucket_count -1
                    columns id,sale_date,prod_name,sale_nums
                    columns.comments 
                    columns.types bigint:string:string:int
                    comment Imported by sqoop on 2020/11/25 19:14:01
                    field.delim ?
                    file.inputformat org.apache.hadoop.mapred.TextInputFormat
                    file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                    line.delim 

                    location hdfs://nameservice1/user/hive/warehouse/test.db/ods_fact_sale
                    name test.ods_fact_sale
                    numFiles 4
                    numRows 767830000
                    rawDataSize 30653263662
                    serialization.ddl struct ods_fact_sale { i64 id, string sale_date, string prod_name, i32 sale_nums}
                    serialization.format ?
                    serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                    totalSize 31421093662
                    transient_lastDdlTime 1608796507
                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                
                    input format: org.apache.hadoop.mapred.TextInputFormat         //輸入格式 Sequence文件格式
                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat   //輸出格式 Sequence文件格式
                    properties:
                      COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"id":"true","prod_name":"true","sale_date":"true","sale_nums":"true"}}
                      bucket_count -1
                      columns id,sale_date,prod_name,sale_nums
                      columns.comments 
                      columns.types bigint:string:string:int
                      comment Imported by sqoop on 2020/11/25 19:14:01
                      field.delim ?
                      file.inputformat org.apache.hadoop.mapred.TextInputFormat
                      file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                      line.delim 

                      location hdfs://nameservice1/user/hive/warehouse/test.db/ods_fact_sale
                      name test.ods_fact_sale
                      numFiles 4
                      numRows 767830000
                      rawDataSize 30653263662
                      serialization.ddl struct ods_fact_sale { i64 id, string sale_date, string prod_name, i32 sale_nums}
                      serialization.format ?
                      serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                      totalSize 31421093662
                      transient_lastDdlTime 1608796507
                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                    name: test.ods_fact_sale
                  name: test.ods_fact_sale
            Truncated Path -> Alias:
              /test.db/ods_fact_sale [t]
        Reducer 2 
            Execution mode: vectorized
            Needs Tagging: false
            Reduce Operator Tree:          //發(fā)生在job的 reduce 處理階段過程
              Group By Operator
                aggregations: sum(VALUE._col0)
                keys: KEY._col0 (type: string), KEY._col1 (type: string)
                mode: mergepartial
                outputColumnNames: _col0, _col1, _col2
                Statistics: Num rows: 383915000 Data size: 15326631831 Basic stats: COMPLETE Column stats: NONE
                File Output Operator
                  compressed: false
                  GlobalTableId: 0
                  directory: hdfs://nameservice1/tmp/hive/root/2c65817a-8195-495c-9218-5435913ad279/hive_2020-12-30_14-14-11_934_7035611081945658845-1/-mr-10000/.hive-staging_hive_2020-12-30_14-14-11_934_7035611081945658845-1/-ext-10001
                  NumFilesPerFileSink: 1
                  Statistics: Num rows: 383915000 Data size: 15326631831 Basic stats: COMPLETE Column stats: NONE
                  Stats Publishing Key Prefix: hdfs://nameservice1/tmp/hive/root/2c65817a-8195-495c-9218-5435913ad279/hive_2020-12-30_14-14-11_934_7035611081945658845-1/-mr-10000/.hive-staging_hive_2020-12-30_14-14-11_934_7035611081945658845-1/-ext-10001/
                  table:
                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat  
                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat 式
                      properties:
                        columns _col0,_col1,_col2
                        columns.types string:string:bigint
                        escape.delim \
                        hive.serialization.extend.additional.nesting.levels true
                        serialization.escape.crlf true
                        serialization.format 1
                        serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                  TotalFiles: 1
                  GatherStats: false
                  MultiFileSpray: false

  Stage: Stage-0
    Fetch Operator
      limit: -1                       //--job中沒有Limit 
      Processor Tree:
        ListSink

Time taken: 0.731 seconds, Fetched: 136 row(s)
hive> 

參考:

1.https://www.cnblogs.com/skyl/p/4737411.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亏栈,一起剝皮案震驚了整個(gè)濱河市台腥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绒北,老刑警劉巖黎侈,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闷游,居然都是意外死亡峻汉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門脐往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來休吠,“玉大人,你說我怎么就攤上這事业簿×鼋福” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵辖源,是天一觀的道長蔚携。 經(jīng)常有香客問我,道長克饶,這世上最難降的妖魔是什么酝蜒? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮矾湃,結(jié)果婚禮上亡脑,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好霉咨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布蛙紫。 她就那樣靜靜地躺著,像睡著了一般途戒。 火紅的嫁衣襯著肌膚如雪坑傅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天喷斋,我揣著相機(jī)與錄音唁毒,去河邊找鬼。 笑死星爪,一個(gè)胖子當(dāng)著我的面吹牛浆西,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽腾,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼近零,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抄肖?” 一聲冷哼從身側(cè)響起久信,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憎瘸,沒想到半個(gè)月后入篮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈瘦,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幌甘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊项。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅风。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鞍泉,靈堂內(nèi)的尸體忽然破棺而出皱埠,到底是詐尸還是另有隱情,我是刑警寧澤咖驮,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布边器,位于F島的核電站,受9級特大地震影響托修,放射性物質(zhì)發(fā)生泄漏忘巧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一睦刃、第九天 我趴在偏房一處隱蔽的房頂上張望砚嘴。 院中可真熱鬧,春花似錦、人聲如沸际长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽工育。三九已至虾宇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間如绸,已是汗流浹背文留。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竭沫,地道東北人燥翅。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蹲堂,卻偏偏與公主長得像吩跋,于是被迫代替她去往敵國和親檐薯。 傳聞我的和親對象是個(gè)殘疾皇子却桶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容