hive 开窗函数_Hive的架构剖析
本文主要介紹Hive的架構(gòu)和以及HQL的查詢階段,主要內(nèi)容包括:
- Hive的架構(gòu)
- 架構(gòu)中的相關(guān)組件介紹
- HQL的查詢階段
Hive的架構(gòu)
hive的基本架構(gòu)圖如下圖所示:
相關(guān)組件介紹
- 數(shù)據(jù)存儲
Hive中的數(shù)據(jù)可以存儲在任意與Hadoop兼容的文件系統(tǒng),其最常見的存儲文件格式主要有ORC和Parquet。除了HDFS之外,也支持一些商用的云對象存儲,比如AWS S3等。另外,Hive可以讀入并寫入數(shù)據(jù)到其他的獨立處理系統(tǒng),比如Druid、HBase等。
- Data catalog
Hive使用Hive Metastore(HMS)存儲元數(shù)據(jù)信息,使用關(guān)系型數(shù)據(jù)庫來持久化存儲這些信息,其依賴于DataNucleus(提供了標準的接口(JDO, JPA)來訪問各種類型的數(shù)據(jù)庫資源 ),用于簡化操作各種關(guān)系型數(shù)據(jù)庫。為了請求低延遲,HMS會直接通過DataNucleus直接查詢關(guān)系型數(shù)據(jù)庫。HMS的API支持多種編程語言。
- 執(zhí)行引擎
最初版本的Hive支持MapReduce作為執(zhí)行引擎,后來又支持
Tez和Spark作為執(zhí)行引擎,這些執(zhí)行引擎都可以運行在YARN上。
- 查詢服務(wù)
Hiveserver2(HS2)允許用戶執(zhí)行SQL查詢,Hiveserver2允許多個客戶端提交請求到Hive并返回執(zhí)行結(jié)果,HS2支持本地和遠程JDBC和ODBC連接,另外Hive的發(fā)布版中包括一個JDBC的客戶端,稱之為Beeline。
- Hive客戶端
Hive支持多種客戶端,比如Python, Java, C++, Ruby等,可以使用JDBC、ODBC和Thrift drivers連接Hive,Hive的客戶端主要歸為3類:
(1)Thrift Clients
Hive的Server是基于Apache Thrift的,所以支持thrift客戶端的查詢請求
(2)JDBC Client
允許使用Java通過JDBC driver連接Hive,JDBC driver使用Thrift與Hive進行通信的
(3)ODBC Client
Hive的ODBC driver允許使用基于ODBC協(xié)議的應(yīng)用來連接Hive,與JDBC driver類似,ODBC driver也是通過Thrift與Hive server進行通信的
- Hive Driver
Hive Driver接收來自客戶端提交的HQL語句,創(chuàng)建session handles,并將查詢發(fā)送到Compiler(編譯器)。
- Hive Compiler
Hive的Compiler解析查詢語句,編譯器會借助Hive的metastore存儲的元數(shù)據(jù)信息,對不同的查詢塊和查詢表達式執(zhí)行語義分析和類型檢查,然后生成執(zhí)行計劃。
編譯器生成的執(zhí)行計劃就是DAG,每個Stage可能代表一個MR作業(yè)。
- Optimizer(優(yōu)化器)
比如列裁剪、謂詞下推等優(yōu)化,提升查詢效率
執(zhí)行過程
- Step1:執(zhí)行查詢
通過客戶端提交查詢 - Step2:獲取執(zhí)行計劃
dirver接收到查詢,會創(chuàng)建session handle,并將該查詢傳遞給編譯器,生成執(zhí)行計劃 - Step3:獲取元數(shù)據(jù)
編譯器會向metastore發(fā)送獲取元數(shù)據(jù)的請求 - Step4:發(fā)送元數(shù)據(jù)
metastore向編譯器發(fā)送元數(shù)據(jù),編譯器使用元數(shù)據(jù)執(zhí)行類型檢查和語義分析。編譯器會生成執(zhí)行計劃(DAG),對于MapReduce作業(yè)而言,執(zhí)行計劃包括map operator trees
和reduce operator tree - Step5:發(fā)送執(zhí)行計劃
編譯器向Driver發(fā)送生成的執(zhí)行計劃 - Step6:執(zhí)行查詢計劃
從編譯器那里獲取執(zhí)行計劃之后,Driver會向執(zhí)行引擎發(fā)送執(zhí)行計劃 - Step7:提交MR作業(yè)
- Step8:返回查詢結(jié)果
將查詢結(jié)果通過Driver返回個查詢客戶端
HQL的查詢階段
Hive的查詢階段如下圖所示,具體分析如下:
如上圖所示,
- 1.用戶提交查詢到HS2
- 2.該查詢被Driver處理,由編譯器會解析該查詢語句并從AST中生成一個Calcite邏輯計劃
- 3.優(yōu)化邏輯計劃,HS2會訪問關(guān)于HMS的元數(shù)據(jù)信息,用來達到驗證和優(yōu)化的目的
- 4.優(yōu)化的邏輯計劃被轉(zhuǎn)換為物理執(zhí)行計劃
- 5.向量化的執(zhí)行計劃
- 6.生成具體的task,可以是mr或者spark、Tez,并通過Driver提交任務(wù)到Y(jié)ARN
- 7.執(zhí)行結(jié)束后將結(jié)果返回給用戶
總結(jié)
本文首先介紹了Hive的架構(gòu),并對每個組件進行了描述。然后闡述了Hive的具體執(zhí)行過程,最后對HQL的執(zhí)行階段進行了說明。
往期精彩回顧
數(shù)倉|Hive性能調(diào)優(yōu)指北
Hive的條件函數(shù)與日期函數(shù)全面匯總解析
Hive開窗函數(shù)實戰(zhàn)
http://weixin.qq.com/r/Gi99ZWjEjDXzrSwG93oI (二維碼自動識別)
總結(jié)
以上是生活随笔為你收集整理的hive 开窗函数_Hive的架构剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java同步锁synchronized_
- 下一篇: vim显示python嵌套级_在Vim中