hive簡(jiǎn)介
hive架構(gòu)
hive是什么
官網(wǎng)這樣說:https://hive.apache.org/
hive是用來解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問題的互订,一般是作為建立在Hadoop上的OLAP數(shù)據(jù)倉(cāng)庫(kù)钧排。它是一個(gè)客戶端,主要是將SQL轉(zhuǎn)化成MR任務(wù),特別適合離線處理刷允。它有著類似于SQL的語法,上手難度小,最特別的是它有著統(tǒng)一的元數(shù)據(jù)管理便于其他組件也可以使用兔毒。
所以hiv產(chǎn)生的很大的原因就是:非java編程者對(duì)hdfs的數(shù)據(jù)做mapreduce操作B辍!育叁!
hive簡(jiǎn)介
Hive : 數(shù)據(jù)倉(cāng)庫(kù)迅脐。(各種數(shù)據(jù)源的數(shù)據(jù)進(jìn)行統(tǒng)一規(guī)整)
Hive:解釋器,編譯器豪嗽,優(yōu)化器等谴蔑。
Hive 運(yùn)行時(shí),元數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)里面龟梦。(HDFS當(dāng)中所有的數(shù)據(jù)都是文本型數(shù)據(jù)隐锭,沒有字段的映射關(guān)系)
c
(1)用戶接口主要有三個(gè):CLI,Client 和 WUI计贰。
- 其中最常用的是CLI钦睡,CLI啟動(dòng)的時(shí)候赏胚,會(huì)同時(shí)啟動(dòng)一個(gè)Hive副本焊虏。大都是命令行床蜘,用戶體驗(yàn)差
- Client是Hive的客戶端秽梅,用戶連接至Hive Server权烧。在啟動(dòng) Client模式的時(shí)候构订,需要指出Hive Server所在節(jié)點(diǎn)刊驴,并且在該節(jié)點(diǎn)啟動(dòng)Hive Server捐寥。
- WUI是通過瀏覽器訪問Hive福贞。
(2)Metastore:Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中撩嚼,如mysql、derby(內(nèi)存數(shù)據(jù)庫(kù)挖帘,一般不用)完丽。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性拇舀,表的屬性(是否為外部表等)逻族,表的數(shù)據(jù)所在目錄等。
-
內(nèi)嵌模式
內(nèi)嵌模式.png
內(nèi)嵌模式是Hive Metastore的最簡(jiǎn)單的部署方式骄崩,使用Hive內(nèi)嵌的Derby數(shù)據(jù)庫(kù)來存儲(chǔ)元數(shù)據(jù)聘鳞。但是Derby只能接受一個(gè)Hive會(huì)話的訪問,試圖啟動(dòng)第二個(gè)Hive會(huì)話就會(huì)導(dǎo)致Metastore連接失敗要拂。
-
本地模式
本地模式
本地模式是Metastore的默認(rèn)模式(懶人專用模式)抠璃。該模式下,單Hive會(huì)話(一個(gè)Hive 服務(wù)JVM)以組件方式調(diào)用Metastore和Driver脱惰。我們可以采用MySQL作為Metastore的數(shù)據(jù)庫(kù)搏嗡。
-
遠(yuǎn)程模式
遠(yuǎn)程模式.png
用于非Java客戶端訪問元數(shù)據(jù)庫(kù),在服務(wù)器端啟動(dòng)MetaStoreServer,客戶端利用Thrift協(xié)議通過MetaStoreServer訪問元數(shù)據(jù)庫(kù)
遠(yuǎn)程模式將Metastore分離出來采盒,成為一個(gè)獨(dú)立的Hive服務(wù)(Metastore服務(wù)還可以部署多個(gè))旧乞。這樣的模式可以將數(shù)據(jù)庫(kù)層完全置于防火墻后,客戶就不再需要用戶名和密碼登錄數(shù)據(jù)庫(kù)磅氨,避免了認(rèn)證信息的泄漏尺栖。
(3)解釋器、編譯器烦租、優(yōu)化器完成HQL查詢語句從詞法分析延赌、語法分析、編譯左权、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中痴颊,并在隨后有MapReduce調(diào)用執(zhí)行赏迟。
(4)Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢蠢棱、計(jì)算由MapReduce完成(包含*的查詢锌杀,比如select * from tbl不會(huì)生成MapRedcue任務(wù))
(5)Driver:包含編譯器,優(yōu)化器和執(zhí)行器
接收客戶端請(qǐng)求-->編譯泻仙,解釋糕再,執(zhí)行-->提交給yarn執(zhí)行
Driver 每一個(gè)Hive服務(wù)都需要調(diào)用Driver來完成HQL語句的翻譯和執(zhí)行。通俗地說玉转,Driver就是HQL編譯器突想,它解析和優(yōu)化HQL語句,將其轉(zhuǎn)換成一個(gè)Hive Job(可以是MapReduce究抓,也可以是Spark等其他任務(wù))并提交給Hadoop集群猾担。
(6)Operator
Hive的架構(gòu)
- 編譯器將一個(gè)Hive SQL轉(zhuǎn)換操作符
- 操作符是Hive的最小的處理單元
- 每個(gè)操作符代表HDFS的一個(gè)操作或者一道MapReduce作業(yè)
Operator
- Operator都是hive定義的一個(gè)處理過程
Operator都定義有: - protected List <Operator<? extends Serializable >> childOperators;
- protected List <Operator<? extends Serializable >> parentOperators;
- protected boolean done; // 初始化值為false