Hive基本原理
Hive結(jié)構(gòu)
Hive為單實例的服務(wù)進程,提供服務(wù)的原理是將HQL編譯解析成相應(yīng)的MapReduce或者HDFS任務(wù)。
- 各模塊的功能說明如下:
HiveServer
一個集群內(nèi)可部署多個HiveServer,負荷分擔。對外提供Hive數(shù)據(jù)庫服務(wù),將用戶提交的HQL語句進行編譯,解析成對應(yīng)的Yarn任務(wù)或者HDFS操作,從而完成數(shù)據(jù)的提取、轉(zhuǎn)換、分析。
MetaStore
一個集群內(nèi)可部署多個MetaStore,負荷分擔。提供Hive的元數(shù)據(jù)服務(wù),負責Hive表的結(jié)構(gòu)和屬性信息讀、寫、維護和修改。
提供Thrift接口,供HiveServer、Spark、WebHCat等MetaStore客戶端來訪問,操作元數(shù)據(jù)。
WebHCat
一個集群內(nèi)可部署多個WebHCat,負荷分擔。提供Rest接口,通過Rest執(zhí)行Hive命令,提交MapReduce任務(wù)。
Hive客戶端
包括人機交互命令行Beeline、提供給JDBC應(yīng)用的JDBC驅(qū)動、提供給Python應(yīng)用的Python驅(qū)動、提供給Mapreduce的HCatalog相關(guān)JAR包。
ZooKeeper集群
ZooKeeper作為臨時節(jié)點記錄各HiveServer實例的IP地址列表,客戶端驅(qū)動連接Zookeeper獲取該列表,并根據(jù)路由機制選取對應(yīng)的HiveServer實例。
HDFS/HBase集群
Hive表數(shù)據(jù)存儲在HDFS集群中。
MapReduce/Yarn集群
提供分布式計算服務(wù):Hive的大部分數(shù)據(jù)操作依賴MapReduce,HiveServer的主要功能是將HQL語句轉(zhuǎn)換成MapReduce任務(wù),從而完成對海量數(shù)據(jù)的處理。
Hive原理
Hive作為一個基于HDFS和MapReduce架構(gòu)的數(shù)據(jù)倉庫,其主要能力是通過對HQL(Hive Query Language)編譯和解析,生成并執(zhí)行相應(yīng)的MapReduce任務(wù)或者HDFS操作。
- 各模塊的功能說明如下:
Metastore
對表,列和Partition等的元數(shù)據(jù)進行讀寫及更新操作,其下層為關(guān)系型數(shù)據(jù)庫。
Driver
管理HiveQL執(zhí)行的生命周期并貫穿Hive任務(wù)整個執(zhí)行期間。
Compiler
編譯HiveQL并將其轉(zhuǎn)化為一系列相互依賴的Map/Reduce任務(wù)。
Optimizer
優(yōu)化器,分為邏輯優(yōu)化器和物理優(yōu)化器,分別對HiveQL生成的執(zhí)行計劃和MapReduce任務(wù)進行優(yōu)化。
Executor
按照任務(wù)的依賴關(guān)系分別執(zhí)行MapReduce任務(wù)。
ThriftServer
提供thrift接口,作為JDBC和ODBC的服務(wù)端,并將Hive和其他應(yīng)用程序集成起來。
Clients
包含WebUI和JDBC/ODBC接口,為用戶訪問提供接口。
Hive CBO原理介紹
CBO(Cost Based Optimization),即基于代價的優(yōu)化器。優(yōu)化目標是:在編譯階段,根據(jù)查詢語句中涉及到的表和查詢條件,計算出產(chǎn)生中間結(jié)果少的高效join順序,從而減少查詢時間和資源消耗。
- Hive中實現(xiàn)CBO的總體過程如下:
Hive使用開源組件Apache Calcite實現(xiàn)CBO。首先SQL語句轉(zhuǎn)化成Hive的AST,然后轉(zhuǎn)成Calcite可以識別的RelNodes。Calcite將RelNode中的Join順序調(diào)整后,再由Hive將RelNode轉(zhuǎn)成AST,繼續(xù)Hive的邏輯優(yōu)化和物理優(yōu)化過程。
Calcite調(diào)整Join順序的具體過程如下:
1、針對所有參與Join的表,依次選取一個表作為第一張表。
2、依據(jù)選取的第一張表,根據(jù)代價選擇第二張表,第三張表。由此可以得到多個不同的執(zhí)行計劃。
3、計算出代價最小的一個計劃,作為最終的順序優(yōu)化結(jié)果。
Hive與其他組件的關(guān)系
-
Hive與HDFS組件的關(guān)系
Hive是Apache的Hadoop項目的子項目,Hive利用HDFS作為其文件存儲系統(tǒng)。Hive通過解析和計算處理結(jié)構(gòu)化的數(shù)據(jù),Hadoop HDFS則為Hive提供了高可靠性的底層存儲支持。Hive數(shù)據(jù)庫中的所有數(shù)據(jù)文件都可以存儲在Hadoop HDFS文件系統(tǒng)上,Hive所有的數(shù)據(jù)操作也都是通過Hadoop HDFS接口進行的。
Hive是Apache的Hadoop項目的子項目,Hive利用HDFS作為其文件存儲系統(tǒng)。Hive通過解析和計算處理結(jié)構(gòu)化的數(shù)據(jù),Hadoop HDFS則為Hive提供了高可靠性的底層存儲支持。Hive數(shù)據(jù)庫中的所有數(shù)據(jù)文件都可以存儲在Hadoop HDFS文件系統(tǒng)上,Hive所有的數(shù)據(jù)操作也都是通過Hadoop HDFS接口進行的。
-
Hive與MapReduce組件的關(guān)系
Hive的數(shù)據(jù)計算依賴于MapReduce。MapReduce也是Apache的Hadoop項目的子項目,它是一個基于Hadoop HDFS分布式并行計算框架。Hive進行數(shù)據(jù)分析時,會將用戶提交的HQL語句解析成相應(yīng)的MapReduce任務(wù)并提交MapReduce執(zhí)行。
Hive的數(shù)據(jù)計算依賴于MapReduce。MapReduce也是Apache的Hadoop項目的子項目,它是一個基于Hadoop HDFS分布式并行計算框架。Hive進行數(shù)據(jù)分析時,會將用戶提交的HQL語句解析成相應(yīng)的MapReduce任務(wù)并提交MapReduce執(zhí)行。
-
Hive與Tez的關(guān)系
Tez是Apache的開源項目,它是一個支持有向無環(huán)圖的分布式計算框架,Hive使用Tez引擎進行數(shù)據(jù)分析時,會將用戶提交的HQL語句解析成相應(yīng)的Tez任務(wù)并提交Tez執(zhí)行。
Tez是Apache的開源項目,它是一個支持有向無環(huán)圖的分布式計算框架,Hive使用Tez引擎進行數(shù)據(jù)分析時,會將用戶提交的HQL語句解析成相應(yīng)的Tez任務(wù)并提交Tez執(zhí)行。
-
Hive與DBService的關(guān)系
Hive的MetaStore(元數(shù)據(jù)服務(wù))處理Hive的數(shù)據(jù)庫、表、分區(qū)等的結(jié)構(gòu)和屬性信息(即Hive的元數(shù)據(jù)),這些信息需要存放在一個關(guān)系型數(shù)據(jù)庫中,由MetaStore管理和處理。在產(chǎn)品中,Hive的元數(shù)據(jù)由DBService組件存儲和維護,由Metadata組件提供元數(shù)據(jù)服務(wù)。
Hive的MetaStore(元數(shù)據(jù)服務(wù))處理Hive的數(shù)據(jù)庫、表、分區(qū)等的結(jié)構(gòu)和屬性信息(即Hive的元數(shù)據(jù)),這些信息需要存放在一個關(guān)系型數(shù)據(jù)庫中,由MetaStore管理和處理。在產(chǎn)品中,Hive的元數(shù)據(jù)由DBService組件存儲和維護,由Metadata組件提供元數(shù)據(jù)服務(wù)。
Hive開源增強特性
-
Hive開源增強特性:支持HDFS Colocation
HDFS Colocation(同分布)是HDFS提供的數(shù)據(jù)分布控制功能,利用HDFS Colocation接口,可以將存在關(guān)聯(lián)關(guān)系或者可能進行關(guān)聯(lián)操作的數(shù)據(jù)存放在相同的存儲節(jié)點上。
Hive支持HDFS的Colocation功能,即在創(chuàng)建Hive表時,通過設(shè)置表文件分布的locator信息,可以將相關(guān)表的數(shù)據(jù)文件存放在相同的存儲節(jié)點上,從而使后續(xù)的多表關(guān)聯(lián)的數(shù)據(jù)計算更加方便和高效。
HDFS Colocation(同分布)是HDFS提供的數(shù)據(jù)分布控制功能,利用HDFS Colocation接口,可以將存在關(guān)聯(lián)關(guān)系或者可能進行關(guān)聯(lián)操作的數(shù)據(jù)存放在相同的存儲節(jié)點上。
Hive支持HDFS的Colocation功能,即在創(chuàng)建Hive表時,通過設(shè)置表文件分布的locator信息,可以將相關(guān)表的數(shù)據(jù)文件存放在相同的存儲節(jié)點上,從而使后續(xù)的多表關(guān)聯(lián)的數(shù)據(jù)計算更加方便和高效。
-
Hive開源增強特性:支持列加密功能
Hive支持對表的某一列或者多列進行加密。在創(chuàng)建Hive表時,可以指定要加密的列和加密算法。當使用insert語句向表中插入數(shù)據(jù)時,即可將對應(yīng)的列進行加密。Hive列加密不支持視圖以及Hive over HBase場景。
Hive列加密機制目前支持的加密算法有兩種,具體使用的算法在建表時指定。其中:
AES(對應(yīng)加密類名稱為:org.apache.hadoop.hive.serde2.AESRewriter)
SMS4(對應(yīng)加密類名稱為:org.apache.hadoop.hive.serde2.SMS4Rewriter)
Hive支持對表的某一列或者多列進行加密。在創(chuàng)建Hive表時,可以指定要加密的列和加密算法。當使用insert語句向表中插入數(shù)據(jù)時,即可將對應(yīng)的列進行加密。Hive列加密不支持視圖以及Hive over HBase場景。
Hive列加密機制目前支持的加密算法有兩種,具體使用的算法在建表時指定。其中:
AES(對應(yīng)加密類名稱為:org.apache.hadoop.hive.serde2.AESRewriter)
SMS4(對應(yīng)加密類名稱為:org.apache.hadoop.hive.serde2.SMS4Rewriter)
-
Hive開源增強特性:支持行分隔符
通常情況下,Hive以文本文件存儲的表會以回車作為其行分隔符,即在查詢過程中,以回車符作為一行表數(shù)據(jù)的結(jié)束符。
但某些數(shù)據(jù)文件并不是以回車分隔的規(guī)則文本格式,而是以某些特殊符號分割其規(guī)則文本。
MRS Hive支持指定不同的字符或字符組合作為Hive文本數(shù)據(jù)的行分隔符。
通常情況下,Hive以文本文件存儲的表會以回車作為其行分隔符,即在查詢過程中,以回車符作為一行表數(shù)據(jù)的結(jié)束符。
但某些數(shù)據(jù)文件并不是以回車分隔的規(guī)則文本格式,而是以某些特殊符號分割其規(guī)則文本。
MRS Hive支持指定不同的字符或字符組合作為Hive文本數(shù)據(jù)的行分隔符。
-
Hive開源增強特性:支持HBase刪除功能
由于底層存儲系統(tǒng)的原因,Hive并不能支持對單條表數(shù)據(jù)進行刪除操作,但在Hive on HBase功能中,MRS解決方案中的Hive提供了對HBase表的單條數(shù)據(jù)的刪除功能,通過特定的語法,Hive可以將自己在HBase表中符合條件的一條或者多條數(shù)據(jù)清除。
由于底層存儲系統(tǒng)的原因,Hive并不能支持對單條表數(shù)據(jù)進行刪除操作,但在Hive on HBase功能中,MRS解決方案中的Hive提供了對HBase表的單條數(shù)據(jù)的刪除功能,通過特定的語法,Hive可以將自己在HBase表中符合條件的一條或者多條數(shù)據(jù)清除。
-
Hive開源增強特性:支持數(shù)據(jù)庫授權(quán)
Hive開源社區(qū)版本只支持數(shù)據(jù)庫的擁有者在數(shù)據(jù)庫中創(chuàng)建表。MRS Hive支持授予用戶在數(shù)據(jù)庫中創(chuàng)建表“CREATE”和查詢表“SELECT”權(quán)限。當授予用戶在數(shù)據(jù)庫中查詢的權(quán)限之后,系統(tǒng)會自動關(guān)聯(lián)數(shù)據(jù)庫中所有表的查詢權(quán)限。
Hive開源社區(qū)版本只支持數(shù)據(jù)庫的擁有者在數(shù)據(jù)庫中創(chuàng)建表。MRS Hive支持授予用戶在數(shù)據(jù)庫中創(chuàng)建表“CREATE”和查詢表“SELECT”權(quán)限。當授予用戶在數(shù)據(jù)庫中查詢的權(quán)限之后,系統(tǒng)會自動關(guān)聯(lián)數(shù)據(jù)庫中所有表的查詢權(quán)限。
-
Hive開源增強特性:支持列授權(quán)
Hive開源社區(qū)版本只支持表級別的權(quán)限控制。MRS Hive支持列級別的權(quán)限控制,可授予用戶列級別權(quán)限,例如查詢“SELECT”、插入“INSERT”、修改“UPDATE”權(quán)限。
Hive開源社區(qū)版本只支持表級別的權(quán)限控制。MRS Hive支持列級別的權(quán)限控制,可授予用戶列級別權(quán)限,例如查詢“SELECT”、插入“INSERT”、修改“UPDATE”權(quán)限。