Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行。其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。mysql
Hive是創建在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,能夠用來進行數據提取轉化加載(ETL),這是一種能夠存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 HQL,它容許熟悉 SQL 的用戶查詢數據。同時,這個語言也容許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 沒法完成的複雜的分析工做。web
Hive和關係數據庫仍是有很大的不一樣sql
服務端組件:數據庫
Driver組件:該組件包括Complier、Optimizer和Executor,它的做用是將咱們寫的HiveQL(類SQL)語句進行解析、編譯優化,生成執行計劃,而後調用底層的mapreduce計算框架。編程
Metastore組件:元數據服務組件,這個組件存儲hive的元數據,hive的元數據存儲在關係數據庫裏,hive支持的關係數據庫有derby、mysql。元數據對於hive十分重要,所以hive支持把metastore服務獨立出來,安裝到遠程的服務器集羣裏,從而解耦hive服務和metastore服務,保證hive運行的健壯性。服務器
Thrift服務:thrift是facebook開發的一個軟件框架,它用來進行可擴展且跨語言的服務的開發,hive集成了該服務,能讓不一樣的編程語言調用hive的接口。架構
客戶端組件:app
CLI:command line interface,命令行接口。框架
Thrift客戶端:上面的架構圖裏沒有寫上Thrift客戶端,可是hive架構的許多客戶端接口是創建在thrift客戶端之上,包括JDBC和ODBC接口。編程語言
WEBGUI:hive客戶端提供了一種經過網頁的方式訪問hive所提供的服務。這個接口對應hive的hwi組件(hive web interface),使用前要啓動hwi服務。
首先建立一個普通的文本文件,裏面只有一行數據,該行也只存儲一個字符串
echo ‘sharpxiajun’ > /home/hadoop/test.txt
而後咱們建一張hive的表:
hive –e 「create table test (value string);
接下來加載數據:
Load data local inpath ‘home/hadoop/test.txt’ overwrite into table test
最後咱們查詢下表:
hive –e ‘select * from test’;
l 關係數據庫裏,表的加載模式是在數據加載時候強制肯定的(表的加載模式是指數據庫存儲數據的文件格式),若是加載數據時候發現加載的數據不符合模式,關係數據庫則會拒絕加載數據,這個就叫「寫時模式」,寫時模式會在數據加載時候對數據模式進行檢查校驗的操做。Hive在加載數據時候和關係數據庫不一樣,hive在加載數據時候不會對數據進行檢查,也不會更改被加載的數據文件,而檢查數據格式的操做是在查詢操做時候執行,這種模式叫「讀時模式」。在實際應用中,寫時模式在加載數據時候會對列進行索引,對數據進行壓縮,所以加載數據的速度很慢,可是當數據加載好了,咱們去查詢數據的時候,速度很快。可是當咱們的數據是非結構化,存儲模式也是未知時候,關係數據操做這種場景就麻煩多了,這時候hive就會發揮它的優點。
l 關係數據庫一個重要的特色是能夠對某一行或某些行的數據進行更新、刪除操做,hive不支持對某個具體行的操做,hive對數據的操做只支持覆蓋原數據和追加數據。Hive也不支持事務和索引。更新、事務和索引都是關係數據庫的特徵,這些hive都不支持,也不打算支持,緣由是hive的設計是海量數據進行處理,全數據的掃描時常態,針對某些具體數據進行操做的效率是不好的,對於更新操做,hive是經過查詢將原表的數據進行轉化最後存儲在新表裏,這和傳統數據庫的更新操做有很大不一樣。
l Hive也能夠在hadoop作實時查詢上作一份本身的貢獻,那就是和hbase集成,hbase能夠進行快速查詢,可是hbase不支持類SQL的語句,那麼此時hive能夠給hbase提供sql語法解析的外殼,能夠用類sql語句操做hbase數據庫。