Hive簡介
Hive是什么
Hive是構建在Hadoop之上的數據倉庫平台。
Hive是一個SQL解析引擎,將SQL轉譯成MapReduce程序並在Hadoop上運行。
Hive是HDFS的一個文件目錄,一個表名對應一個目錄名,若該表是分區表,則分區值對應子目錄名。
Hive的歷史由來

Hive體系結構
Hive在Hadoop中的位置

Hive設計特征
Hive 做為Hadoop 的數據倉庫處理工具,它所有的數據都存儲在Hadoop 兼容的文件系統中。
Hive 在加載數據過程中不會對數據進行任何的修改,只是將數據移動到HDFS 中Hive 設定的目錄下,因此,Hive 不支持對數據的改寫和添加,所有的數據都是在加載的時候確定的。
Hive 的設計特點如下:
支持索引,加快數據查詢。
不同的存儲類型,例如,純文本文件、HBase 中的文件。
將元數據保存在關系數據庫中,減少了在查詢中執行語義檢查時間。
可以直接使用存儲在Hadoop 文件系統中的數據。
內置大量用戶函數UDF 來操作時間、字符串和其他的數據挖掘工具,支持用戶擴展UDF 函數來完成內置函數無法實現的操作。
類SQL 的查詢方式,將SQL 查詢轉換為MapReduce 的job 在Hadoop集群上執行。
編碼跟Hadoop同樣使用UTF-8字符集。
Hive體系結構

用戶接口:
CLI:命令行界面,Cli 啟動的時候,會同時啟動一個 Hive 副本。
JDBC客戶端:封裝了Thrift,java應用程序,可以通過指定的主機和端口連接到在另一個進程中運行的hive服務器
ODBC客戶端:ODBC驅動允許支持ODBC協議的應用程序連接到Hive。
WUI 接口:是通過瀏覽器訪問 Hive
Thrift服務器:
基於socket通訊,支持跨語言。Hive Thrift服務簡化了在多編程語言中運行Hive的命令。綁定支持C++,Java,PHP,Python和Ruby語言。
解析器:
編譯器:完成 HQL 語句從詞法分析、語法分析、編譯、優化以及執行計划的生成。
優化器是一個演化組件,當前它的規則是:列修剪,謂詞下推。
執行器會順序執行所有的Job。如果Task鏈不存在依賴關系,可以采用並發執行的方式執行Job。
元數據庫:
Hive的數據由兩部分組成:數據文件和元數據。元數據用於存放Hive庫的基礎信息,它存儲在關系數據庫中,如 mysql、derby。元數據包括:數據庫信息、表的名字,表的列和分區及其屬性,表的屬性,表的數據所在目錄等。
Hadoop:
Hive 的數據文件存儲在 HDFS 中,大部分的查詢由 MapReduce 完成。(對於包含 * 的查詢,比如 select * from tbl 不會生成 MapRedcue 作業)
Hive運行機制

① 用戶通過用戶接口連接Hive,發布Hive SQL
② Hive解析查詢並制定查詢計划
③ Hive將查詢轉換成MapReduce作業
④ Hive在Hadoop上執行MapReduce作業
Hive適用場景
Hive的優勢
- 解決了傳統關系數據庫在大數據處理上的瓶頸。適合大數據的批量處理。
- 充分利用集群的CPU計算資源、存儲資源,實現並行計算。
- Hive支持標准SQL語法,免去了編寫MR程序的過程,減少了開發成本。
- 具有良好的擴展性,拓展功能方便。
Hive的缺點
- Hive的HQL表達能力有限:有些復雜運算用HQL不易表達。
- Hive效率低:Hive自動生成MR作業,通常不夠智能;HQL調優困難,粒度較粗;可控性差。
- 針對Hive運行效率低下的問題,促使人們去尋找一種更快,更具交互性的分析框架。 SparkSQL 的出現則有效的提高了Sql在Hadoop 上的分析運行效率。
Hive的應用場景
適用場景
不適用場景
- 復雜的機器學習算法
- 復雜的科學計算
- 聯機交互式實時查詢
Hive安裝
參考:Hive偽分布式下安裝