參考 《Hadoop大數據分析與挖掘實戰》的在線電子書閱讀
http://yuedu.baidu.com/ebook/d128cf8e33687e21ae45a935?pn=1&click_type=10010002
Hive最初是應Facebook每天產生的海量新興社會網絡數據進行管理和機器學習的需求而產生和發展的,是建立在Hadoop上的數據倉庫基礎構架。作為Hadoop的一個數據倉庫工具,Hive可以將結構化的數據文件映射為一張數據庫表,並提供簡單的SQL查詢功能。
Hive作為構建在Hadoop之上的數據倉庫,它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。Hive定義了簡單的類SQL查詢語言,成為HQL,它允許熟悉SQL的用戶查詢數據。因此,該語言也允許熟悉MapReduce的開發者開發自定義的Mapper和Reducer來處理內建的Mapper和Reducer無法完成的復雜的分析工作。
Hive沒有專門的數據格式。Hive可以很好地工作在Thrift(是個服務器)之上,控制分隔符,也允許用戶指定數據格式。
Hive具有以下特點:
.支持索引,加快數據查詢。
.不同的存儲類型,如純文本文件、HBase中的文件。
.將元數據保存在關系數據庫中,大大減少了在查詢過程中執行語義檢查的時間。
如, 2 hive的使用 + hive的常用語法 里的.hive的常用語法
.可以直接使用存儲在Hadoop文件系統中的數據。
如, 2 hive的使用 + hive的常用語法 里的.hive的常用語法
.內置大量用戶函數UDF來操作時間、字符串和其他的數據挖掘工具,支持用戶擴展UDF函數來完成內置函數無法實現的操作。
如, 3 hql語法及自定義函數 里的 .hive自定義函數
.類SQL的查詢方式,將SQL查詢轉換為MapReducer的Job在Hadoop集群上執行。
Hive構建在基於靜態批處理的Hadoop之上,Hadoop通常都有較高的延遲並且在作業提交和調度時需要大量的開銷。因此,Hive並不能夠在大規模數據集上實現低延遲快速的查詢。例如,Hive在幾百MB的數據集上執行查詢一般有分鍾級的時間延遲。因此,Hive並不適合那些需要低延遲的應用,如聯機事務處理(OLTP)。Hive查詢操作過程嚴格遵守Hadoop MapReduce的作業執行模型,Hive將用戶的HiveQL語句通過解釋器轉換為MapReduce作業提交到Hadoop集群上,Hadoo監控作業執行過程,然后返回作業執行結果給用戶。Hive並非為聯機事務處理而設計,Hive並不提供實時的查詢和基於行級的數據更新操作。
Hive的最佳使用場合是大數據集的批處理作業,如網絡日志分析。
Hive的架構

圖1 Hive的架構
從圖1中可以看到,Hive包含用戶訪問接口(CLI、JDBC/ODBC、GUI和Thrift Server)、元數據存儲(Metastore)、驅動組件(包括編譯、優化、執行驅動)。
用戶訪問接口即用戶用來訪問Hive數據倉庫所使用的工具接口。
CLI(command line interface)即命令行接口。
Thrift Server是Facebook開發的一個軟件框架,它用來開發可擴展且跨語言的服務,Hive集成了該服務,能讓不同的編程語言調用Hive的接口。
Hive客戶端提供了通過網頁的方式訪問Hive提供的服務,這個接口對應Hive的HWI組件(Hive web interface),使用前要啟動HWI服務。
Metastore是Hive中的元數據存儲,主要存儲Hive中的元數據,包括表的名稱、表的列和分區及其屬性、表的屬性(是否為外部表等)、表的數據所在目錄等,一般使用MySQL或Derby數據庫。
Metastore和Hive Driver驅動的互聯有兩種方式,一種是集成模式,如圖2所示;一種是遠程模式,如圖3所示。

圖2 Metastore 和 Driver通信(集成模式)

圖3 Metastore 和 Driver通信(遠程模式)
