真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

hivesql的執(zhí)行及編譯過程

一、hive在執(zhí)行sql時(shí)會(huì)以mapreduce的方式對(duì)數(shù)據(jù)進(jìn)行接入和處理,其主要包含以下幾個(gè)階段:
hive sql的執(zhí)行及編譯過程
1.hive首先根據(jù)sql語句中的表從hdfs文件中獲取數(shù)據(jù),對(duì)數(shù)據(jù)文件進(jìn)行split操作,使其可以一行一行將所需數(shù)據(jù)讀入內(nèi)存;
2.map函數(shù)將內(nèi)存中的數(shù)據(jù)按照key值進(jìn)行映射,形成一行一行的key-value值,比如用戶表中的性別字段,內(nèi)存中map處理后的記錄如下:
hive sql的執(zhí)行及編譯過程
3.在實(shí)際應(yīng)用中會(huì)有多臺(tái)機(jī)器參與map處理,map完成后需要將帶有相同key的數(shù)據(jù)分發(fā)到同一臺(tái)集群去進(jìn)行后續(xù)處理,此時(shí)的操作稱為shuffle;
4.如果sql中包含有join、count、sum,此時(shí)還會(huì)進(jìn)行reduce操作,比如count,其完成reduce后數(shù)據(jù)情況如下:
hive sql的執(zhí)行及編譯過程

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供雨山網(wǎng)站建設(shè)、雨山做網(wǎng)站、雨山網(wǎng)站設(shè)計(jì)、雨山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、雨山企業(yè)網(wǎng)站模板建站服務(wù),十多年雨山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

二、在hive底層,同時(shí)還會(huì)將上面的sql進(jìn)行編譯,其過程主要包含以下六點(diǎn):
hive sql的執(zhí)行及編譯過程
為便于理解,我們拿一個(gè)簡(jiǎn)單的查詢語句進(jìn)行展示,對(duì)5月30號(hào)的地區(qū)維表進(jìn)行查詢:

select * from dim.dim_region where dt = '2019-05-30'

1.根據(jù)Antlr定義的sql語法規(guī)則,將相關(guān)sql進(jìn)行詞法、語法解析,轉(zhuǎn)化為抽象語法樹AST Tree

ABSTRACT SYNTAX TREE:
TOK_QUERY
    TOK_FROM 
    TOK_TABREF
           TOK_TABNAME
               dim
                 dim_region
    TOK_INSERT
      TOK_DESTINATION
          TOK_DIR
              TOK_TMP_FILE
        TOK_SELECT
          TOK_SELEXPR
              TOK_ALLCOLREF
        TOK_WHERE
          =
              TOK_TABLE_OR_COL
                  dt
                    '2019-05-30'

2.遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock
AST Tree生成后由于其復(fù)雜度依舊較高,不便于翻譯為mapreduce程序,需要進(jìn)行進(jìn)一步抽象和結(jié)構(gòu)化,形成QueryBlock。QueryBlock是一條SQL最基本的組成單元,包括三個(gè)部分:輸入源,計(jì)算過程,輸出。簡(jiǎn)單來講一個(gè)QueryBlock就是一個(gè)子查詢。QB的生成過程為一個(gè)遞歸過程,先序遍歷 AST Tree ,遇到不同的Token 節(jié)點(diǎn)(理解為特殊標(biāo)記),保存到相應(yīng)的屬性中,主要包含以下幾個(gè)過程:

  • TOK_QUERY:創(chuàng)建 QB 對(duì)象,循環(huán)遞歸子節(jié)點(diǎn)
  • TOK_FROM:將表名語法部分保存到 QB 對(duì)象的 aliasToTabs 等屬性中
  • TOK_INSERT:循環(huán)遞歸子節(jié)點(diǎn)
  • TOK_DESTINATION:將輸出目標(biāo)的語法部分保存在 QBParseInfo 對(duì)象的nameToDest 屬性中
  • TOK_SELECT:分別將查詢表達(dá)式的語法部分保存在 destToSelExpr 、destToAggregationExprs 、 destToDistinctFuncExprs 三個(gè)屬性中
  • TOK_WHERE:將 Where 部分的語法保存在 QBParseInfo 對(duì)象的destToWhereExpr 屬性中

3.遍歷QueryBlock,翻譯為執(zhí)行操作樹OperatorTree
Hive最終生成的MapReduce任務(wù),Map階段和Reduce階段均由OperatorTree組成。邏輯操作符,就是在Map階段或者Reduce階段完成單一特定的操作。
基本的操作符包括TableScanOperator,SelectOperator,F(xiàn)ilterOperator,JoinOperator,GroupByOperator,ReduceSinkOperator
ReduceSinkOperator將Map端的字段組合序列化為Reduce Key/value, Partition Key,只可能出現(xiàn)在Map階段,同時(shí)也標(biāo)志著Hive生成的MapReduce程序中Map階段的結(jié)束。
Operator在Map Reduce階段之間的數(shù)據(jù)傳遞都是一個(gè)流式的過程。每一個(gè)Operator對(duì)一行數(shù)據(jù)完成操作后之后將數(shù)據(jù)傳遞給childOperator計(jì)算。
由于Join/GroupBy/OrderBy均需要在Reduce階段完成,所以在生成相應(yīng)操作的Operator之前都會(huì)先生成一個(gè)ReduceSinkOperator,將字段組合并序列化為Reduce Key/value, Partition Key。

4..Logical Optimizer對(duì)OperatorTree進(jìn)行優(yōu)化操作
使用ReduceSinkOperator,減少shuffle數(shù)據(jù)量。大部分邏輯層優(yōu)化器通過變換 OperatorTree ,合并操作符,達(dá)到減少 MapReduce Job ,減少 shuffle 數(shù)據(jù)量的目的。

5.遍歷OperatorTree,并翻譯為MapReduce任務(wù)
OperatorTree 轉(zhuǎn)化為 Task tree的過程分為下面幾個(gè)階段

對(duì)輸出表生成 MoveTask
從 OperatorTree 的其中一個(gè)根節(jié)點(diǎn)向下深度優(yōu)先遍歷
ReduceSinkOperator 標(biāo)示 Map/Reduce 的界限,多個(gè) Job 間的界限
遍歷其他根節(jié)點(diǎn),遇過碰到 JoinOperator 合并 MapReduceTask
生成 StatTask 更新元數(shù)據(jù)
剪斷 Map 與 Reduce 間的 Operator 的關(guān)系

6.物理層優(yōu)化器對(duì)MapReduce任務(wù)進(jìn)行優(yōu)化,生成最終的執(zhí)行計(jì)劃


網(wǎng)站名稱:hivesql的執(zhí)行及編譯過程
文章分享:http://weahome.cn/article/posojp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部