国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive執(zhí)行計(jì)劃之一文讀懂Hive執(zhí)行計(jì)劃

這篇具有很好參考價(jià)值的文章主要介紹了Hive執(zhí)行計(jì)劃之一文讀懂Hive執(zhí)行計(jì)劃。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概述

Hive的執(zhí)行計(jì)劃描述了一個(gè)hiveSQL語句的具體執(zhí)行步驟,通過執(zhí)行計(jì)劃解讀可以了解hiveSQL語句被解析器轉(zhuǎn)換為相應(yīng)程序語言的執(zhí)行邏輯。通過執(zhí)行邏輯可以知曉HiveSQL運(yùn)行流程,進(jìn)而對(duì)流程進(jìn)行優(yōu)化,實(shí)現(xiàn)更優(yōu)的數(shù)據(jù)查詢處理。

同樣,通過執(zhí)行計(jì)劃,還可以了解到哪些不一樣的SQL邏輯其實(shí)是等價(jià)的,哪些看似一樣的邏輯其實(shí)是執(zhí)行代價(jià)完全不一樣。

如果說Hive優(yōu)化是一堵技術(shù)路上的高墻,那么關(guān)于Hive執(zhí)行計(jì)劃,就是爬上這堵高墻的一架梯子。

不同版本的Hive會(huì)采用不同的方式生成的執(zhí)行計(jì)劃。主要區(qū)別就是基于規(guī)則生成hive執(zhí)行計(jì)劃,和基于成本代價(jià)來生成執(zhí)行計(jì)劃。而hive早期版本是基于規(guī)則生成執(zhí)行計(jì)劃,在Hive0.14及之后的版本都是基于成本代價(jià)來生成執(zhí)行計(jì)劃,這主要是集成了Apache Calcite。Apache Calcite具體可以查看官網(wǎng)介紹。

兩種方式的優(yōu)劣顯而易見,基于規(guī)則生成執(zhí)行計(jì)劃,作為使用方來說,集群的環(huán)境,數(shù)據(jù)量的大小完全不一樣,同樣的規(guī)則邏輯,執(zhí)行起來差異巨大,因此會(huì)對(duì)開發(fā)者有更高的優(yōu)化要求。Hive基于成本代價(jià)來生成執(zhí)行計(jì)劃,這種方式能夠結(jié)合Hive元數(shù)據(jù)信息和Hive運(yùn)行過程收集到的各類存儲(chǔ)統(tǒng)計(jì)信息推測(cè)出一個(gè)更合理的執(zhí)行計(jì)劃。也就是說Hive本身已經(jīng)為我們的SQL語句做了一輪優(yōu)化了,可以預(yù)見的將來,Hive還會(huì)具備更多的優(yōu)化能力。

Hive執(zhí)行計(jì)劃是一個(gè)預(yù)估的執(zhí)行計(jì)劃,只有在SQL實(shí)際執(zhí)行后才會(huì)獲取到真正的執(zhí)行計(jì)劃,而一些關(guān)系型數(shù)據(jù)庫中,會(huì)提供真實(shí)的SQL執(zhí)行計(jì)劃。如SQLserver和Oracle等。

1.hive執(zhí)行計(jì)劃的查看

Hive提供的執(zhí)行計(jì)劃使用語法如下:

EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
  • EXPLAIN:查看執(zhí)行計(jì)劃的基本信息;
  • EXTENDED:加上 extended 可以輸出有關(guān)計(jì)劃的額外擴(kuò)展信息。這些通常是物理信息,例如文件名等;
  • CBO:可以選擇使用Calcite優(yōu)化器不同成本模型生成計(jì)劃。CBO 從 hive 4.0.0 版本開始支持;
  • AST:輸出查詢的抽象語法樹。AST 在hive 2.1.0 版本刪除了,存在bug,轉(zhuǎn)儲(chǔ)AST可能會(huì)導(dǎo)致OOM錯(cuò)誤,將在4.0.0版本修復(fù);
  • DEPENDENCY:dependency在EXPLAIN語句中使用會(huì)產(chǎn)生有關(guān)計(jì)劃中輸入的依賴信息。包含表和分區(qū)信息等;
  • AUTHORIZATION:顯示SQL操作相關(guān)權(quán)限的信息;
  • LOCKS:這對(duì)于了解系統(tǒng)將獲得哪些鎖以運(yùn)行指定的查詢很有用。LOCKS 從 hive 3.2.0 開始支持;
  • VECTORIZATION:查看SQL的矢量化描述信息;
  • ANALYZE:用實(shí)際的行數(shù)注釋計(jì)劃。從 Hive 2.2.0 開始支持;

以上內(nèi)容重點(diǎn)關(guān)注explain,explain extend,explain dependency,explain authorization,explain vectorization。

2.學(xué)會(huì)查看Hive執(zhí)行計(jì)劃的基本信息

一個(gè)HIVE查詢被轉(zhuǎn)換為一個(gè)由一個(gè)或多個(gè)stage組成的序列(有向無環(huán)圖DAG)。這些stage可以是MapReduce stage,也可以是負(fù)責(zé)元數(shù)據(jù)存儲(chǔ)的stage,也可以是負(fù)責(zé)文件系統(tǒng)的操作(比如移動(dòng)和重命名)的stage。

在查詢SQL語句前加上關(guān)鍵字explain用來查看執(zhí)行計(jì)劃的基本信息。

可以看如下實(shí)例的執(zhí)行計(jì)劃結(jié)果解析:

實(shí)例SQL

-- 本文默認(rèn)使用mr計(jì)算引擎
explain
-- 統(tǒng)計(jì)年齡小于30歲各個(gè)年齡里,昵稱里帶“小”的人數(shù)
select age,count(0) as num from temp.user_info_all where ymd = '20230505'
and age < 30 and nick like '%小%'
group by age;

執(zhí)行計(jì)劃:

# 描述任務(wù)之間stage的依賴關(guān)系
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1
# 每個(gè)stage詳細(xì)信息
STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: user_info_all
            Statistics: Num rows: 32634295 Data size: 783223080 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: ((age < 30) and (nick like '%小%')) (type: boolean)
              Statistics: Num rows: 5439049 Data size: 130537176 Basic stats: COMPLETE Column stats: NONE
              Select Operator
                expressions: age (type: bigint)
                outputColumnNames: age
                Statistics: Num rows: 5439049 Data size: 130537176 Basic stats: COMPLETE Column stats: NONE
                Group By Operator
                  aggregations: count(0)
                  keys: age (type: bigint)
                  mode: hash
                  outputColumnNames: _col0, _col1
                  Statistics: Num rows: 5439049 Data size: 130537176 Basic stats: COMPLETE Column stats: NONE
                  Reduce Output Operator
                    key expressions: _col0 (type: bigint)
                    sort order: +
                    Map-reduce partition columns: _col0 (type: bigint)
                    Statistics: Num rows: 5439049 Data size: 130537176 Basic stats: COMPLETE Column stats: NONE
                    value expressions: _col1 (type: bigint)
      Reduce Operator Tree:
        Group By Operator
          aggregations: count(VALUE._col0)
          keys: KEY._col0 (type: bigint)
          mode: mergepartial
          outputColumnNames: _col0, _col1
          Statistics: Num rows: 2719524 Data size: 65268576 Basic stats: COMPLETE Column stats: NONE
          File Output Operator
            compressed: true
            Statistics: Num rows: 2719524 Data size: 65268576 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: -1
      Processor Tree:
        ListSink

我們將上述結(jié)果拆分看,先從最外層開始,包含兩個(gè)大的部分:

  • stage dependencies: 各個(gè)stage之間的依賴性

  • stage plan: 各個(gè)stage的執(zhí)行計(jì)劃

先看第一部分 stage dependencies ,包含兩個(gè) stage,Stage-1 是根stage,說明這是開始的stage,Stage-0 依賴 Stage-1,Stage-1執(zhí)行完成后執(zhí)行Stage-0。

一些Hive執(zhí)行邏輯的可視化工具頁面就是利用該語句信息繪畫出Hive執(zhí)行流程圖以及相關(guān)進(jìn)度信息。

再看第二部分 stage plan,里面有一個(gè) Map Reduce,一個(gè)MR的執(zhí)行計(jì)劃分為兩個(gè)部分:

  • Map Operator Tree: MAP端的執(zhí)行計(jì)劃樹
  • Reduce Operator Tree: Reduce端的執(zhí)行計(jì)劃樹

這兩個(gè)執(zhí)行計(jì)劃樹里面包含這條sql語句的 operator:

map端Map Operator Tree信息解讀:

  • TableScan 對(duì)關(guān)鍵字alias聲明的結(jié)果集進(jìn)行表掃描操作。

    alias: 表名稱

    Statistics: 表統(tǒng)計(jì)信息,包含表中數(shù)據(jù)條數(shù),數(shù)據(jù)大小等

  • Filter Operator:過濾操作,表示在之前的表掃描結(jié)果集上進(jìn)行數(shù)據(jù)過濾。

    predicate:過濾數(shù)據(jù)時(shí)使用的謂詞(過濾條件),如sql語句中的and age < 30,則此處顯示(age < 30),什么是謂詞,以及優(yōu)化點(diǎn),可以詳細(xì)看之前一篇文章謂詞下推。

    Statistics:過濾后數(shù)據(jù)條數(shù)和大小。

  • Select Operator: 對(duì)列進(jìn)行投影,即篩選列,選取操作。

    expressions:篩選的列名稱及列類型

    outputColumnNames:輸出的列名稱

    Statistics:篩選列后表統(tǒng)計(jì)信息,包含表中數(shù)據(jù)條數(shù),數(shù)據(jù)大小等。

  • Group By Operator:分組聚合操作。

    aggregations:顯示聚合函數(shù)信息,這里使用count(0)

    keys:表示分組的列,如果沒有分組,則沒有此字段。

    mode:聚合模式,值有 hash:隨機(jī)聚合;mergepartial:合并部分聚合結(jié)果;final:最終聚合

    outputColumnNames:聚合之后輸出列名,_col0對(duì)應(yīng)的是age列, _col1對(duì)應(yīng)的是count(0)列。

    Statistics: 表統(tǒng)計(jì)信息,包含分組聚合之后的數(shù)據(jù)條數(shù),數(shù)據(jù)大小。

  • Reduce Output Operator:輸出到reduce操作結(jié)果集信息。

    key expressions:MR計(jì)算引擎,在map和reduce階段的輸出都是key-value形式,這里描述的是map端輸出的鍵使用的是哪個(gè)數(shù)據(jù)列。_col0對(duì)應(yīng)的是age列。

    sort order:值為空不排序;值為 + 正序排序,值為 - 倒序排序;值為 +- 排序的列為兩列,第一列為正序,第二列為倒序,以此類推多值排序。

    Map-reduce partition columns:表示Map階段輸出到Reduce階段的分區(qū)列,在HiveSQL中,可以用distribute by指定分區(qū)的列。這里默認(rèn)為_col0對(duì)應(yīng)的是age列。

    Statistics:輸出結(jié)果集的統(tǒng)計(jì)信息。

    value expressions:對(duì)應(yīng)key expressions,這里是value值字段。_col1對(duì)應(yīng)的是count(0)列。

接下來是reduce階段Reduce Operator Tree,出現(xiàn)和map階段關(guān)鍵詞一樣的,其含義是一致的,羅列一下map階段未出現(xiàn)的關(guān)鍵詞。

  • File Output Operator:文件輸出操作。

    compressed:表示輸出結(jié)果是否進(jìn)行壓縮,true壓縮,false不壓縮。

  • table:表示當(dāng)前操作表的信息。

    input format:輸入文件類型。

    output format:輸出文件類型。

    serde:讀取表數(shù)據(jù)的序列化和反序列化方式。

Stage-0的操作信息。

  • Fetch Operator:客戶端獲取數(shù)據(jù)操作。

    limit:值為-1標(biāo)識(shí)不限制條數(shù),其他值為限制的條數(shù)。

  • Processor Tree:處理器樹

    ListSink:數(shù)據(jù)展示。

3.執(zhí)行計(jì)劃步驟操作過程

可以根據(jù)上述執(zhí)行計(jì)劃通過流程圖來描述一下hiveSQL的執(zhí)行邏輯過程。

Hive執(zhí)行計(jì)劃之一文讀懂Hive執(zhí)行計(jì)劃

通過上圖可以很清晰的了解一個(gè)hiveSQL的執(zhí)行邏輯過程,便于理解hive數(shù)據(jù)流轉(zhuǎn)過程。

4.explain extended

explain extended可以查看explain的擴(kuò)展信息,主要包含三個(gè)部分內(nèi)容:

  • 抽象語法樹(Abstract Syntax Tree,AST):是SQL轉(zhuǎn)換成MR或其他計(jì)算引擎的任務(wù)中的一個(gè)重要過程。AST 在HIVE-13533中從 explain extended 中刪除 ,并在HIVE-15932 中恢復(fù)為單獨(dú)的命令 。
  • 作業(yè)的依賴關(guān)系圖,同explain展現(xiàn)內(nèi)容。
  • 每個(gè)作業(yè)的詳細(xì)信息,即Stage Plans,相比explain多了表配置信息,表文件存儲(chǔ)路徑等。具體可以通過以下命令進(jìn)行查看比對(duì)。不作列舉了。
explain extended
-- 統(tǒng)計(jì)年齡小于30歲各個(gè)年齡里,昵稱里帶“小”的人數(shù)
select age,count(0) as num from temp.user_info_all where ymd = '20230505'
and age < 30 and nick like '%小%'
group by age;

下一期:Hive執(zhí)行計(jì)劃之hive依賴及權(quán)限查詢和常見使用場(chǎng)景

按例,歡迎點(diǎn)擊此處關(guān)注我的個(gè)人公眾號(hào),交流更多知識(shí)。

后臺(tái)回復(fù)關(guān)鍵字 hive,隨機(jī)贈(zèng)送一本魯邊備注版珍藏大數(shù)據(jù)書籍。文章來源地址http://www.zghlxwxcb.cn/news/detail-473551.html

到了這里,關(guān)于Hive執(zhí)行計(jì)劃之一文讀懂Hive執(zhí)行計(jì)劃的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hive執(zhí)行計(jì)劃之什么是hiveSQL向量化模式及優(yōu)化詳解

    Hive開啟向量化模式也是hiveSQL優(yōu)化方法中的一種,可以提升hive查詢速率,也叫hive矢量化。 問題1:那么什么是hive向量化模式呢? 問題2:hive向量化什么情況下可以被使用,或者說它有哪些使用場(chǎng)景呢? 問題3:如何查看hive向量化使用的相關(guān)信息? hive向量化模式是hive的一個(gè)特

    2024年02月08日
    瀏覽(27)
  • Hive執(zhí)行計(jì)劃之只有map階段SQL性能分析和解讀

    Hive執(zhí)行計(jì)劃之只有map階段SQL性能分析和解讀

    目錄 目錄 概述 1.不帶函數(shù)操作的select-from-where型簡(jiǎn)單SQL 1.1執(zhí)行示例 1.2 運(yùn)行邏輯分析 1.3 偽代碼解釋 2.帶普通函數(shù)和運(yùn)行操作符的普通型SQL執(zhí)行計(jì)劃解讀 2.1 執(zhí)行計(jì)劃解讀 2.2 偽代碼解釋邏輯 可能所有的SQLboy剛接觸SQL語句的時(shí)候都是select xxx from xxx where xxx。在hive中,我們把這

    2024年02月08日
    瀏覽(97)
  • 一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一、執(zhí)行順序問題 JavaScript中的await語句是異步編程中用于等待Promise對(duì)象執(zhí)行結(jié)果的,它通常與async函數(shù)一起使用。在使用await時(shí),程序的執(zhí)行將暫停,直到該后面的Promise對(duì)象完成執(zhí)行并返回結(jié)果。 函數(shù)代碼執(zhí)行順序通常情況下按照代碼所在文件從上至下

    2024年02月03日
    瀏覽(20)
  • 【hive-design】hive架構(gòu)詳解:描述了hive架構(gòu),hive主要組件的作用、hsql在hive執(zhí)行過程中的底層細(xì)節(jié)、hive各組件作用

    【hive-design】hive架構(gòu)詳解:描述了hive架構(gòu),hive主要組件的作用、hsql在hive執(zhí)行過程中的底層細(xì)節(jié)、hive各組件作用

    本文主要討論了 描述了hive架構(gòu),hive主要組件的作用 詳細(xì)描述了hsql在hive執(zhí)行過程中的底層細(xì)節(jié) 描述了hive各組件作用 架構(gòu)圖: 如上圖表達(dá)了hive的主要組件和以及與hadoop的交互: 主要的hive組件: UI :用戶提交接口,用于用戶提交查詢和其他操作等。 Driver :接收查詢的組件

    2024年02月04日
    瀏覽(92)
  • 一文讀懂CPU工作原理、程序是如何在單片機(jī)內(nèi)執(zhí)行的、指令格式之操作碼地址碼

    一文讀懂CPU工作原理、程序是如何在單片機(jī)內(nèi)執(zhí)行的、指令格式之操作碼地址碼

    CPU的控制單元在時(shí)序脈沖的作用下,將指令計(jì)數(shù)器里所指向的指令地址(這個(gè)地址是在內(nèi)存里的)送到地址總線上去,然后CPU將這個(gè)地址里的指令讀到指令寄存器進(jìn)行譯碼。由運(yùn)算器執(zhí)行對(duì)應(yīng)的機(jī)器指令,并將結(jié)果通過地址總線寫回?cái)?shù)據(jù)段 中間處理器(CPU,Central Processing Uni

    2024年01月16日
    瀏覽(25)
  • 一文讀懂ChatGPT

    ChatGPT(全名:Chat Generative Pre-trained Transformer),美國(guó)OpenAI 研發(fā)的聊天機(jī)器人程序,于2022年11月30日發(fā)布。ChatGPT是人工智能技術(shù)驅(qū)動(dòng)的自然語言處理工具,它能夠通過理解和學(xué)習(xí)人類的語言來進(jìn)行對(duì)話,還能根據(jù)聊天的上下文進(jìn)行互動(dòng),真正像人類一樣來聊天交流,甚至能完

    2024年02月06日
    瀏覽(34)
  • 一文讀懂Docker原理

    一文讀懂Docker原理

    說起Docker,基本上就是指容器。許多同學(xué)熟悉Docker的操作,卻搞不懂到底什么是容器。本文就來講講Docker容器到底是個(gè)啥。 容器被稱為輕量級(jí)的虛擬化技術(shù),實(shí)際上是不準(zhǔn)確的。確切地說,容器是一種對(duì)進(jìn)程進(jìn)行隔離的運(yùn)行環(huán)境。 由于生產(chǎn)環(huán)境的容器幾乎都是運(yùn)行在Linux上的

    2024年01月17日
    瀏覽(27)
  • 一文讀懂?dāng)?shù)據(jù)加密

    一文讀懂?dāng)?shù)據(jù)加密

    在計(jì)算機(jī)信息安全領(lǐng)域,之前軟件設(shè)計(jì)師的網(wǎng)絡(luò)安全部分了解了一點(diǎn)密碼學(xué)的知識(shí),這里隨想記錄一下。 數(shù)據(jù)加密 的基本過程就是對(duì)原來為 明文 的文件或數(shù)據(jù)按 某種算法 進(jìn)行處理,使其成為不可讀的一段代碼為“ 密文 ”,使其只能在輸入相應(yīng)的 密鑰 之后才能顯示出原容

    2024年02月03日
    瀏覽(25)
  • 一文讀懂HTML

    一文讀懂HTML

    HTML(HyperText Markup Language)的歷史可以追溯到20世紀(jì)90年代早期,它是互聯(lián)網(wǎng)發(fā)展的重要里程碑之一。以下是HTML的歷史概述: 早期階段(1980年代末 - 1990年代初):在互聯(lián)網(wǎng)的早期階段,人們開始意識(shí)到需要一種標(biāo)記語言來創(chuàng)建和共享文檔。這導(dǎo)致了Tim Berners-Lee在1989年至1991年

    2024年02月13日
    瀏覽(27)
  • 一文讀懂Zookeeper

    1、介紹zookeeper 1.1、zookeeper概述 ? ZooKeeper從字面意思理解,【Zoo - 動(dòng)物園,Keeper - 管理員】動(dòng)物園中有很多種動(dòng)物,這里的動(dòng)物就可以比作分布式環(huán)境下多種多樣的服務(wù),而ZooKeeper做的就是管理這些服務(wù)。 ? Apache ZooKeeper的系統(tǒng)為分布式協(xié)調(diào)是構(gòu)建分布式應(yīng)用的高性能服務(wù)。

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包