hive的執(zhí)行流程

1. 執(zhí)行流程概述

hive的執(zhí)行流程
查看hive語(yǔ)句的執(zhí)行流程:explain select ….from t_table …;

成都創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!

  • 查看hive語(yǔ)句的執(zhí)行流程:explain select ….from t_table …;
  • 操作符是hive的最小執(zhí)行單元
  • Hive通過(guò)execmapper和execreducer執(zhí)行MapReduce程序,執(zhí)行模式有本地模式和分布式模式
  • 每個(gè)操作符代表一個(gè) HDFS 操作或者 MapReduce 作業(yè)
    hive的操作符
    hive的執(zhí)行流程
    Hive編譯器的工作職責(zé)
  • Parser:將Hql語(yǔ)句轉(zhuǎn)換成抽像的語(yǔ)法書(shū)(Abstract Syntax Tree)
  • Semantic Analyzer:將抽象語(yǔ)法樹(shù)轉(zhuǎn)換成查詢塊
  • Logic Plan Generator:將查詢樹(shù),轉(zhuǎn)換成邏輯查詢計(jì)劃
  • Logic Optimizer:重寫(xiě)邏輯查詢計(jì)劃,優(yōu)化邏輯執(zhí)行計(jì)劃
  • Physical Plan Gernerator:將邏輯執(zhí)行計(jì)劃轉(zhuǎn)化為物理計(jì)劃
  • Physical Optimizer:選擇最佳的join策略,優(yōu)化物理執(zhí)行計(jì)劃

2. Hive 工作原理

hive的執(zhí)行流程
流程大致步驟為:

1.?用戶提交查詢等任務(wù)給Driver。

2.?編譯器獲得該用戶的任務(wù)Plan。

3.?編譯器Compiler根據(jù)用戶任務(wù)去MetaStore中獲取需要的Hive的元數(shù)據(jù)信息。

4.?編譯器Compiler得到元數(shù)據(jù)信息,對(duì)任務(wù)進(jìn)行編譯,先將HiveQL轉(zhuǎn)換為抽象語(yǔ)法樹(shù),然后將抽象語(yǔ)法樹(shù)轉(zhuǎn)換成查詢塊,將查詢塊轉(zhuǎn)化為邏輯的查詢計(jì)劃,重寫(xiě)邏輯查詢計(jì)劃,將邏輯計(jì)劃轉(zhuǎn)化為物理的計(jì)劃(MapReduce),?最后選擇最佳的策略。

5.?將最終的計(jì)劃提交給Driver。

  1. Driver將計(jì)劃Plan轉(zhuǎn)交給ExecutionEngine去執(zhí)行,獲取元數(shù)據(jù)信息,提交給JobTracker或者SourceManager執(zhí)行該任務(wù),任務(wù)會(huì)直接讀取HDFS中文件進(jìn)行相應(yīng)的操作。

7.?獲取執(zhí)行的結(jié)果。

8.?取得并返回執(zhí)行結(jié)果。

3. hive的具體執(zhí)行過(guò)程分析

(1)Join(reduce join)

例:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON pv.userid = u.userid;
hive的執(zhí)行流程
map 端:以 JOIN ON 條件中的列作為 Key,以page_view表中的需要字段,表標(biāo)識(shí)作為value,最終通過(guò)key進(jìn)行排序,也就是join字段進(jìn)行排序。
shuffle端:根據(jù) Key 的值進(jìn)行 Hash,并將 Key/Value 對(duì)按照 Hash 值推 至不同對(duì) Reduce 中
reduce 端:根據(jù)key進(jìn)行分組,根據(jù)不同的表的標(biāo)識(shí),拿出不同的數(shù)據(jù),進(jìn)行拼接。

(2)group by

例:SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;
hive的執(zhí)行流程
map 端
key:以pageid, age作為key,并且在map輸出端有combiner。
value :1次
reduce 端:對(duì)value進(jìn)行求和

(3)distinct

例:select distinct age from log;
map端
key:age
value:null
reduce端
一組只要一個(gè)輸出context.write(key,null)。

(4)distinct+count

例:select count(distinct userid) from weibo_temp;
即使設(shè)置了reduce個(gè)數(shù)為3個(gè),最終也只會(huì)執(zhí)行一個(gè),因?yàn)?,count()是全局,只能開(kāi)啟一個(gè)reducetask。
map端
key:userid
value: null
reduce端
一組只要一個(gè),定義一個(gè)全局變量用于計(jì)數(shù),在cleanup(Context context) 中輸出context.write(key,count)
當(dāng)然distinct+count是一個(gè)容易產(chǎn)生數(shù)據(jù)傾斜的做法,應(yīng)該盡量避免,如果無(wú)法避免,那么就使用這種方法:
select count(1) from (select distinct userid from weibo_temp); 這樣可以并行多個(gè)reduce task任務(wù),從而解決單節(jié)點(diǎn)的壓力過(guò)大。

網(wǎng)站標(biāo)題:hive的執(zhí)行流程
本文網(wǎng)址:http://muchs.cn/article16/ihdsdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、App開(kāi)發(fā)、做網(wǎng)站、品牌網(wǎng)站建設(shè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司