Hive是建立在Hadoop上的 數(shù)據(jù)倉庫 框架,提供 大數(shù)據(jù) 平臺批處理計算能力,能夠?qū)Y構化/半結構化數(shù)據(jù)進行批量分析匯總完成數(shù)據(jù)計算。提供類似SQL的Hive Query Language語言操作結構化數(shù)據(jù),其基本原理是將HQL語言自動轉(zhuǎn)換成MapReduce任務,從而完成對Hadoop集群中存儲的海量數(shù)據(jù)進行查詢和分析。
Hive主要特點如下:
· 海量結構化數(shù)據(jù)分析匯總。
· 將復雜的MapReduce編寫任務簡化為SQL語句。
· 靈活的數(shù)據(jù)存儲格式,支持JSON,CSV,TEXTFILE,RCFILE,SEQUENCEFILE,ORC(Optimized Row Columnar)這幾種存儲格式。

Hive結構
Hive提供服務的原理是將HQL編譯解析成相應的MapReduce或者HDFS任務,如下為Hive的結構概圖。

|
名稱 |
說明 |
|
HiveServer |
一個集群內(nèi)可部署多個HiveServer,負荷分擔。對外提供Hive 數(shù)據(jù)庫 服務,將用戶提交的HQL語句進行編譯,解析成對應的Yarn任務或者HDFS操作,從而完成數(shù)據(jù)的提取、轉(zhuǎn)換、分析。 |
|
MetaStore |
· 一個集群內(nèi)可部署多個MetaStore,負荷分擔。提供Hive的元數(shù)據(jù)服務,負責Hive表的結構和屬性信息讀、寫、維護和修改。 · 提供Thrift接口,供HiveServer、Spark、WebHCat等MetaStore客戶端來訪問,操作元數(shù)據(jù)。 |
|
WebHCat |
一個集群內(nèi)可部署多個WebHCat,負荷分擔。提供Rest接口,通過Rest執(zhí)行Hive命令,提交MapReduce任務。 |
|
Hive客戶端 |
包括人機交互命令行Beeline、提供給JDBC應用的JDBC驅(qū)動、提供給Python應用的Python驅(qū)動、提供給Mapreduce的HCatalog相關JAR包。 |
|
ZooKeeper集群 |
ZooKeeper作為臨時節(jié)點記錄各HiveServer實例的IP地址列表,客戶端驅(qū)動連接Zookeeper獲取該列表,并根據(jù)路由機制選取對應的HiveServer實例。 |
|
HDFS/HBase集群 |
Hive表數(shù)據(jù)存儲在HDFS集群中。 |
|
MapReduce/Yarn集群 |
提供分布式計算服務:Hive的大部分數(shù)據(jù)操作依賴MapReduce,HiveServer的主要功能是將HQL語句轉(zhuǎn)換成MapReduce任務,從而完成對海量數(shù)據(jù)的處理。 |
HCatalog建立在Hive Metastore之上,具有Hive的DDL能力。從另外一種意義上說,HCatalog還是Hadoop的表和存儲管理層,它使用戶能夠通過使用不同的數(shù)據(jù)處理工具(比如MapReduce),更輕松地在網(wǎng)格上讀寫HDFS上的數(shù)據(jù),HCatalog還能為這些數(shù)據(jù)處理工具提供讀寫接口,并使用Hive的命令行接口發(fā)布數(shù)據(jù)定義和元數(shù)據(jù)探索命令。此外,經(jīng)過封裝這些命令,WebHcat Server還對外提供了RESTful接口。

Hive原理
Hive作為一個基于HDFS和MapReduce架構的數(shù)據(jù)倉庫,其主要能力是通過對HQL(Hive Query Language)編譯和解析,生成并執(zhí)行相應的MapReduce任務或者HDFS操作。

· Metastore:對表,列和Partition等的元數(shù)據(jù)進行讀寫及更新操作,其下層為關系型數(shù)據(jù)庫。
· Driver:管理HiveQL執(zhí)行的生命周期并貫穿Hive任務整個執(zhí)行期間。
· Compiler:編譯HiveQL并將其轉(zhuǎn)化為一系列相互依賴的Map/Reduce任務。
· Optimizer:優(yōu)化器,分為邏輯優(yōu)化器和物理優(yōu)化器,分別對HiveQL生成的執(zhí)行計劃和MapReduce任務進行優(yōu)化。
· Executor:按照任務的依賴關系分別執(zhí)行Map/Reduce任務。
· ThriftServer:提供thrift接口,作為JDBC的服務端,并將Hive和其他應用程序集成起來。
· Clients:包含WebUI和JDBC接口,為用戶訪問提供接口。
Hive操作示例
在華為云MRS集群中,您可以通過連接HBase客戶端實現(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認證忽略
2. 執(zhí)行命令進入Hive Beeline命令行。
beeline
...
Beeline version 3.1.0-hw-ei-311001-SNAPSHOT by Apache Hive
0: jdbc:hive2://XXX:21066/>
3. 創(chuàng)建一個表“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ù)文件導入表中。
例如本地已提前準備好源數(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ù)導入后,查詢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;
好了,本期云小課就介紹到這里,快去體驗MapReduce(MRS)更多功能吧!猛戳這里