Hive是建立在Hadoop上的 數(shù)據(jù)倉(cāng)庫 框架,提供 大數(shù)據(jù) 平臺(tái)批處理計(jì)算能力,能夠?qū)Y(jié)構(gòu)化/半結(jié)構(gòu)化數(shù)據(jù)進(jìn)行批量分析匯總完成數(shù)據(jù)計(jì)算。提供類似SQL的Hive Query Language語言操作結(jié)構(gòu)化數(shù)據(jù),其基本原理是將HQL語言自動(dòng)轉(zhuǎn)換成MapReduce任務(wù),從而完成對(duì)Hadoop集群中存儲(chǔ)的海量數(shù)據(jù)進(jìn)行查詢和分析。
Hive主要特點(diǎn)如下:
· 海量結(jié)構(gòu)化數(shù)據(jù)分析匯總。
· 將復(fù)雜的MapReduce編寫任務(wù)簡(jiǎn)化為SQL語句。
· 靈活的數(shù)據(jù)存儲(chǔ)格式,支持JSON,CSV,TEXTFILE,RCFILE,SEQUENCEFILE,ORC(Optimized Row Columnar)這幾種存儲(chǔ)格式。
Hive結(jié)構(gòu)
Hive提供服務(wù)的原理是將HQL編譯解析成相應(yīng)的MapReduce或者HDFS任務(wù),如下為Hive的結(jié)構(gòu)概圖。
名稱 |
說明 |
HiveServer |
一個(gè)集群內(nèi)可部署多個(gè)HiveServer,負(fù)荷分擔(dān)。對(duì)外提供Hive 數(shù)據(jù)庫 服務(wù),將用戶提交的HQL語句進(jìn)行編譯,解析成對(duì)應(yīng)的Yarn任務(wù)或者HDFS操作,從而完成數(shù)據(jù)的提取、轉(zhuǎn)換、分析。 |
MetaStore |
· 一個(gè)集群內(nèi)可部署多個(gè)MetaStore,負(fù)荷分擔(dān)。提供Hive的元數(shù)據(jù)服務(wù),負(fù)責(zé)Hive表的結(jié)構(gòu)和屬性信息讀、寫、維護(hù)和修改。 · 提供Thrift接口,供HiveServer、Spark、WebHCat等MetaStore客戶端來訪問,操作元數(shù)據(jù)。 |
WebHCat |
一個(gè)集群內(nèi)可部署多個(gè)WebHCat,負(fù)荷分擔(dān)。提供Rest接口,通過Rest執(zhí)行Hive命令,提交MapReduce任務(wù)。 |
Hive客戶端 |
包括人機(jī)交互命令行Beeline、提供給JDBC應(yīng)用的JDBC驅(qū)動(dòng)、提供給Python應(yīng)用的Python驅(qū)動(dòng)、提供給Mapreduce的HCatalog相關(guān)JAR包。 |
ZooKeeper集群 |
ZooKeeper作為臨時(shí)節(jié)點(diǎn)記錄各HiveServer實(shí)例的IP地址列表,客戶端驅(qū)動(dòng)連接Zookeeper獲取該列表,并根據(jù)路由機(jī)制選取對(duì)應(yīng)的HiveServer實(shí)例。 |
HDFS/HBase集群 |
Hive表數(shù)據(jù)存儲(chǔ)在HDFS集群中。 |
MapReduce/Yarn集群 |
提供分布式計(jì)算服務(wù):Hive的大部分?jǐn)?shù)據(jù)操作依賴MapReduce,HiveServer的主要功能是將HQL語句轉(zhuǎn)換成MapReduce任務(wù),從而完成對(duì)海量數(shù)據(jù)的處理。 |
HCatalog建立在Hive Metastore之上,具有Hive的DDL能力。從另外一種意義上說,HCatalog還是Hadoop的表和存儲(chǔ)管理層,它使用戶能夠通過使用不同的數(shù)據(jù)處理工具(比如MapReduce),更輕松地在網(wǎng)格上讀寫HDFS上的數(shù)據(jù),HCatalog還能為這些數(shù)據(jù)處理工具提供讀寫接口,并使用Hive的命令行接口發(fā)布數(shù)據(jù)定義和元數(shù)據(jù)探索命令。此外,經(jīng)過封裝這些命令,WebHcat Server還對(duì)外提供了RESTful接口。
Hive原理
Hive作為一個(gè)基于HDFS和MapReduce架構(gòu)的數(shù)據(jù)倉(cāng)庫,其主要能力是通過對(duì)HQL(Hive Query Language)編譯和解析,生成并執(zhí)行相應(yīng)的MapReduce任務(wù)或者HDFS操作。
· Metastore:對(duì)表,列和Partition等的元數(shù)據(jù)進(jìn)行讀寫及更新操作,其下層為關(guān)系型數(shù)據(jù)庫。
· Driver:管理HiveQL執(zhí)行的生命周期并貫穿Hive任務(wù)整個(gè)執(zhí)行期間。
· Compiler:編譯HiveQL并將其轉(zhuǎn)化為一系列相互依賴的Map/Reduce任務(wù)。
· Optimizer:優(yōu)化器,分為邏輯優(yōu)化器和物理優(yōu)化器,分別對(duì)HiveQL生成的執(zhí)行計(jì)劃和MapReduce任務(wù)進(jìn)行優(yōu)化。
· Executor:按照任務(wù)的依賴關(guān)系分別執(zhí)行Map/Reduce任務(wù)。
· ThriftServer:提供thrift接口,作為JDBC的服務(wù)端,并將Hive和其他應(yīng)用程序集成起來。
· Clients:包含WebUI和JDBC接口,為用戶訪問提供接口。
Hive操作示例
在華為云MRS集群中,您可以通過連接HBase客戶端實(shí)現(xiàn)創(chuàng)建表,往表中插入數(shù)據(jù),修改表,讀取表數(shù)據(jù),刪除表中數(shù)據(jù)以及刪除表的功能。
MRS集群的創(chuàng)建可參考創(chuàng)建集群。
1. 安裝集群客戶端后,登錄客戶端。
cd /opt/client/
source bigdata_env
kinit hiveuser #集群未開啟Kerberos認(rèn)證忽略
2. 執(zhí)行命令進(jìn)入Hive Beeline命令行。
beeline
...
Beeline version 3.1.0-hw-ei-311001-SNAPSHOT by Apache Hive
0: jdbc:hive2://XXX:21066/>
3. 創(chuàng)建一個(gè)表“mytable”。
create table mytable(id int,name string,company string) row format delimited fields terminated by ',' stored as textfile;
執(zhí)行命令,查看表是否創(chuàng)建成功。
show tables;
...
+--------------------------------------+
| tab_name |
+--------------------------------------+
| mytable |
+--------------------------------------+
4. 將本地源數(shù)據(jù)文件導(dǎo)入表中。
例如本地已提前準(zhǔn)備好源數(shù)據(jù)文件“/tmp/data.txt”,文件內(nèi)容如下:
1,yang,AAA
2,liu,BBB
3,cheng,CCC
在beeline命令行中執(zhí)行命令加載數(shù)據(jù)至Hive表中。
load data local inpath '/tmp/data.txt' into table mytable;
數(shù)據(jù)導(dǎo)入后,查詢Hive表內(nèi)容數(shù)據(jù)。
select * from mytable;
...
+-------------+---------------+------------------+
| mytable.id | mytable.name | mytable.company |
+-------------+---------------+------------------+
| 1 | yang | AAA |
| 2 | liu | BBB |
| 3 | cheng | CCC |
+-------------+---------------+------------------+
5. 刪除表。
drop table mytable;
好了,本期云小課就介紹到這里,快去體驗(yàn)MapReduce(MRS)更多功能吧!猛戳這里