Hive SQL的执行流程
【為什么要了解hive執(zhí)行流程】
.當(dāng)我們寫了一個sql,但是執(zhí)行起來很慢,這時如果我們知道這個sql的底層執(zhí)行流程是怎樣的,就會比較容易去優(yōu)化
.如果我們在面試中被問及對hive的理解,如果說就是寫sql會顯得很片面,如果我們了解hive的執(zhí)行流程,就會知道,雖然表面上是寫sql,但是在從hive的sql,到最終出來執(zhí)行結(jié)果,中間經(jīng)歷了MR流程,其中MR的map,combiner,shuffle,reduce具體是執(zhí)行了hive的那個部分,這樣就會比較全面。
【分析基于hadoop之上的SQL執(zhí)行流程】
基本SQL框架
【例表:traffic_info】
| NAME | ID | TRAFFIC |
| YY | 1001 | 204 |
【例表:TV_info】
| ID | BOSS |
| 1001 | 若老 |
select name,count(1) fromtraffic_info group by name;
select a.name,a.id,a.traffic,b.boss fromtraffic_info a joinTV_info b on a.id=b.id
解析:這兩個簡單的sql基本上涵蓋了所有的大數(shù)據(jù)sql的框架,也就是說無論多磨復(fù)雜的大數(shù)據(jù)sql最終都會落到這兩個簡單的sql框架上,基本上不會有第三種,之所以我們會覺得sql千變?nèi)f化,非常復(fù)雜,基本上都是業(yè)務(wù)的復(fù)雜度的原因
【圖解sql執(zhí)行流程】
sql寫出來以后只是一些字符串的拼接,所以要經(jīng)過一系列的解析處理,才能最終變成集群上的執(zhí)行的作業(yè)
Parser:將sql解析為AST(抽象語法樹),會進(jìn)行語法校驗,AST本質(zhì)還是字符串
Analyzer:語法解析,生成QB(query block)
Logicl Plan:邏輯執(zhí)行計劃解析,生成一堆Opertator Tree
Logical optimizer:進(jìn)行邏輯執(zhí)行計劃優(yōu)化,生成一堆優(yōu)化后的Opertator Tree
Phsical plan:物理執(zhí)行計劃解析,生成tasktree
Phsical Optimizer:進(jìn)行物理執(zhí)行計劃優(yōu)化,生成優(yōu)化后的tasktree,該任務(wù)即是集群上的執(zhí)行的作業(yè)
結(jié)論:經(jīng)過以上的六步,普通的字符串sql被解析映射成了集群上的執(zhí)行任務(wù),最重要的兩步是邏輯執(zhí)行計劃優(yōu)化和物理執(zhí)行計劃優(yōu)化(圖中紅線圈畫)
【SQL與MR流程之間的關(guān)系】
1.過濾類SQL與MR的關(guān)系
執(zhí)行sql:selecta.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘大奔’
結(jié)論:過濾類的sql相當(dāng)于ETL的數(shù)據(jù)清洗過程,并沒有reduce過程,分區(qū)的過濾在讀取數(shù)據(jù)的時候就已經(jīng)進(jìn)行了。map的個數(shù)是由分片數(shù)決定的。
聚合分組類SQL與MR的關(guān)系
select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔馳’ group by city
結(jié)論:
.其實這個過成和WC是非常相似的,在各自的分片中,都是把數(shù)據(jù)分割以后每個值都對應(yīng)一個1得到<key,1>,再經(jīng)過本地reduce(combine過程)把key一樣的value=1相加,得到新的<key,values>,再經(jīng)過shuffle過程,把所有分片中的<key,values>,key一致的values相加,又得到最終的<key,values>。
combiner其實是一個本地的reduce主要就是為了減輕reduce的負(fù)擔(dān),但并不是所有的場景都會發(fā)生combiner,例如求平均數(shù)。
【知識擴(kuò)展】
擴(kuò)展1:reducebykey和groupbykey的區(qū)別,前者會發(fā)生combiner 局部聚合,而后者不會,前者獲得的是相同key對應(yīng)的一個元素,后者是獲取元素集合。reducebykey更加適合大數(shù)據(jù),少用groupbykey(全數(shù)據(jù)shuffle)
擴(kuò)展2:map task數(shù)是由數(shù)據(jù)文件分片數(shù)決定的分片數(shù)即是map任務(wù)數(shù),程序員只能給個期望值
擴(kuò)展3:reduce task數(shù)是由輸入reduce的數(shù)據(jù)的分區(qū)(partitions)數(shù)決定的即分區(qū)數(shù)為map任務(wù)數(shù),默認(rèn)是1,程序員可直接設(shè)置reduce個數(shù)來改變reduce task數(shù),reduce task數(shù)決定來 生成的文件數(shù)。
擴(kuò)展4: MR數(shù)據(jù)shuffle確定數(shù)據(jù)發(fā)往哪一個reduce分區(qū)的規(guī)則是:取key的hashcode值對分區(qū)數(shù)模。
擴(kuò)展5:explain sql ;查看某sql語句的執(zhí)行計劃
【知識拓展來自以下博客】
作者:qq_32641659
來源:CSDN
原文:https://blog.csdn.net/qq_32641659/article/details/89421655
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
官網(wǎng):https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain
總結(jié)
以上是生活随笔為你收集整理的Hive SQL的执行流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 衣帽间装修设计有哪些技巧
- 下一篇: 音频带宽计算公式