hive初探_框架組成、簡單使用


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目錄也能看到該文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM