1、hive:建立在Hadoop上的數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供了簡單的類SQL查詢語言,稱為QL,允許用戶開發自定義的mapper、reducer來處理復雜的分析工作,十分適合數據倉庫的統計分析。
2、Hive架構包括如下組件:
CLI、JDBC、Thrift Server、WEB GUI、Metastore and Diver,分成兩類:服務端組件、客戶端組件
服務端組件:
Driver組件:包括編譯器、優化器、執行器,作用是將我們寫的HQL進行解析、編譯優化、生成執行計划,然后調用底層的marreduce計算框架
metastore組件:元數據服務組件,負責存儲hive的元數據,hive的元數據存儲在關系型數據庫中,hive支持把metastore服務獨立出來,安裝到遠程的服務集群里,從而解耦hive服務和metastore服務,從而保證hive運行的健壯性
thrift服務:用來進行可擴展且跨語言服務的開發,hive集成該服務,能讓不同的開發語言調用hive接口
客戶端組件:
CLI:命令行接口
thrift客戶端:hive的許多客戶端接口是建立在thrift客戶端的基礎之上,包括JDBC、ODBC
WEB GUI:可以通過瀏覽器的方式訪問hive提供的服務接口,該接口對應hive的hwi(hive web interface),所以首先要啟動hwi服務
3、metastore組件:
hive元數據存放地,包括metastore服務、后台數據存儲兩部分
metastore服務:
建立在后台數據存儲介質上,並且可以和hive提供的服務進行交互的服務組件,默認情況下metastore服務是和hive服務安裝在一起的,但是也可以獨立出來,提升hive服務效率
hive執行流程如下圖:
4、和普通關系數據庫的區別
Hive |
RDBMS |
|
查詢語言 |
HQL |
SQL |
數據存儲 |
HDFS |
Raw Device or Local FS |
索引 |
無 |
有 |
執行 |
MapReduce |
Excutor |
執行延遲 |
高 |
低 |
處理數據規模 |
大 |
小 |
5、數據格式:hive中沒有定義專門的數據格式,可以由用戶指定,需要指定三個屬性:(1)列分隔符(空格、\t、\x001)、(2)行分隔符("\n"、\x002)、(3)讀取數據的方法
hive中文件有3種格式:TextFile、SequenceFile、RCFile
hive在進行加載時不需要進行數據格式的轉換,只是將數據復制到相應的HDFS目錄,所以數據加載速度相對數據庫要快一些
6、Hive中的數據不允許修改,在加載的時候就已經確定
7、索引:由於Hive中沒有索引,當要訪問hive數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲要高,但是由於MR的引入,可以並行訪問數據,但是不適合在線數據查詢
8、hive中除了select * from語句不需要生成MR任務執行外,其它都需要
9、hive包含以下幾種數據模型:
(1)table:
每個table在hive中都有一個相應的目錄存儲數據,如table a的hdfs目錄為/warehouse/a,其中warehouse是hive-site.xml中由hive.metastore.warehouse.dir屬性指定,所有的table數據都保存在這個目錄下
(2)external table:
數據存儲在hdfs中,可以創建分區,並不會將數據移動到倉庫目錄中
(3)partition:表table的一個partition對應表下的一個目錄,所有partition的數據都對應在相應的目錄下,如表a包含dt、city兩個partition,則對應於 dt = 20100801, ctry = US 的 HDFS 子目錄為:/ warehouse /xiaojun/dt=20100801/ctry=US;對應於 dt = 20100801, ctry = CA 的 HDFS 子目錄為;/ warehouse /xiaojun/dt=20100801/ctry=CA
(4)buckets:對指定列進行hash,根據hash值切分數據,每個bucket對應一個文件,例如將表a中 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值為 0 的 HDFS 目錄為:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000;hash 值為 20 的 HDFS 目錄為:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020
下面記錄一下hive加載本地數據的方法:
1、首先在本地創建一個文本文件,如empinfo.txt,內容如下:
1|name1|25|13188888888888
2|name2|30|13888888888888
3|name3|3|147896221
2、輸入hive進入hive模式:
hive>
3、創建表:
create table tb_emp_info
> (id int,
> name string,
> age int,
> tel string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '|'
> STORED AS TEXTFILE;
4、加載本地數據:
load data local inpath 'empinfo.txt' into table tb_emp_info;
5、select * from tb_emp_info;查詢是否有數據,驗證數據是否加載成功。
6、查看該表對應的hdfs目錄:
dfs -ls /user/hive/warehouse/tb_emp_info;
查看文件內容:
dfs -text /user/hive/warehouse/tb_emp_info/empinfo.txt;
顯示如下內容:
1|name1|25|13188888888888
2|name2|30|13888888888888
3|name3|3|147896221
在界面查看hdfs目錄也能看到該文件。