Hive最初是應Facebook每天產生的海量新興社會網絡數據進行管理和機器學習的需求而產生和發展的
是建立在Hadoop上的數據倉庫基礎架構
作為Hadoop的一個數據倉庫工具,Hive可以將結構化的數據文件映射為一張數據庫表,并提供簡單的SQL查詢功能
Hive作為數據倉庫,可用來進行數據提取轉化加載(ETL)
Hive構建在基于靜態批處理的Hadoop之上,Hadoop通常都有較高的延遲并且在作業提交和調度時需要大量的開銷
Hive不適合那些需要低延遲的應用,如聯機事務處理(OLTP)
Hive并不提供實時的查詢和基于行級的數據更新操作
Hive的最佳使用場合是大數據集的批處理作業
Hive將用戶的HQL語句通過解釋器轉為MapReduce作業提交到Hadoop集群上,Hadoop監控作業執行過程,然后返回作業執行結果給用戶。
用戶訪問接口,用戶用來訪問Hive數據倉庫所使用的工具接口。
CLI (command line interface) 命令行接口
Thrift Server是Facebook開發的一個軟件框架,它用來開發可擴展且跨語言的服務,Hive集成了該服務,能讓不同編程語言調用Hive的接口
Hive客戶端提供了通過網頁的方式訪問Hive提供的服務,這個接口需要啟動HWI(Hive web interface)服務。
Metastore是Hive中的元數據存儲
主要存儲Hive中表的名稱,列和分區及其屬性、表的屬性(外表?)、表的數據所在目錄等。
Metastore和Hive Driver驅動的互聯有兩種方式,一種是集成模式,一種是遠程模式(通過Thrift Interface連接)
驅動編譯組件包括編譯器、優化器和執行引擎
分別完成HQL的詞法分析、語法分析、編譯、優化以及查詢計劃的生成
生成的查詢計劃存儲在HDFS中,并在隨后由MapReduce調用執行
Hive的數據模型
tinyint | 1 byte |
smallint | 2 byte |
int | 4 byte |
bigint | 8 byte |
float | 4 byte 單精度 |
double | 8 byte 雙精度 |
decimal | 任意精度數字 |
timestamp | yyyy-mm-dd hh:mm:ss |
date? | yyyy-mm-dd |
string | ? |
varchar | 1~65535 |
char | 1~255 |
boolean | ? |
binary | ? |
此外還有:
ARRAY<data_type>
MAP<key_type, value_type>
STRUCT<col_name1:data_type1, ...,?col_namen:data_typen>
UNIONTYPE<data_type1, ...,?data_typen>
Hive中沒有專門的數據存儲格式,也沒有為數據建立索引
用戶可以非常自由的組織Hive中的表,只需明確列分隔符和行分隔符,Hive就可以解析數據
HIve中的數據存儲在HDFS中,有以下數據模型:
表(Table):
? ? 存儲錄由hive-site.xml配置文件中的hive.metastore.warehouse.dir屬性配置,默認為/user/hive/warehouse
外部表(External Table):
分區(Partition):每個分區就是表目錄下的一個目錄
桶(Bucket):根據哈希值對數據進行切分