複製鏈接
請複製以下鏈接發送給好友

hive

(數據倉庫工具)

鎖定
hive是基於Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射為一張數據庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程序。hive十分適合對數據倉庫進行統計分析。 [1] 
外文名
hive
所屬學科
大數據
數據分析
兼容性
hadoop生態圈
依    賴
jdk,hadoop
定    義
在Hadoop上的數據倉庫基礎構架

hive簡介

hive是基於Hadoop構建的一套數據倉庫分析系統,它提供了豐富的SQL查詢方式來分析存儲在Hadoop分佈式文件系統中的數據:可以將結構化的數據文件映射為一張數據庫表,並提供完整的SQL查詢功能;可以將SQL語句轉換為MapReduce任務運行,通過自己的SQL查詢分析需要的內容,這套SQL簡稱Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL語言查詢、彙總和分析數據。而mapreduce開發人員可以把自己寫的mapper和reducer作為插件來支持hive做更復雜的數據分析。它與關係型數據庫的SQL略有不同,但支持了絕大多數的語句如DDL、DML以及常見的聚合函數、連接查詢、條件查詢。它還提供了一系列的工具進行數據提取轉化加載,用來存儲、查詢和分析存儲在Hadoop中的大規模數據集,並支持UDF(User-Defined Function)、UDAF(User-Defined AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以實現對map和reduce函數的定製,為數據操作提供了良好的伸縮性和可擴展性。 [2] 
hive不適合用於聯機(online)事務處理,也不提供實時查詢功能。它最適合應用在基於大量不可變數據的批處理作業。hive的特點包括:可伸縮(在Hadoop的集羣上動態添加設備)、可擴展、容錯、輸入格式的鬆散耦合。 [2] 

hive適用場景

hive 構建在基於靜態批處理的Hadoop 之上,Hadoop 通常都有較高的延遲並且在作業提交和調度的時候需要大量的開銷。因此,hive 並不能夠在大規模數據集上實現低延遲快速的查詢,例如,hive 在幾百MB 的數據集上執行查詢一般有分鐘級的時間延遲。 [3] 
因此,hive 並不適合那些需要高實時性的應用,例如,聯機事務處理(OLTP)。hive 查詢操作過程嚴格遵守Hadoop MapReduce 的作業執行模型,hive 將用户的hiveSQL 語句通過解釋器轉換為MapReduce 作業提交到Hadoop 集羣上,Hadoop 監控作業執行過程,然後返回作業執行結果給用户。hive 並非為聯機事務處理而設計,hive 並不提供實時的查詢和基於行級的數據更新操作。hive 的最佳使用場合是大數據集的批處理作業,例如,網絡日誌分析。 [4] 

hive設計特徵

hive 是一種底層封裝了Hadoop 的數據倉庫處理工具,使用類SQL 的hiveSQL 語言實現數據查詢,所有hive 的數據都存儲在Hadoop 兼容的文件系統(例如,Amazon S3、HDFS)中。hive 在加載數據過程中不會對數據進行任何的修改,只是將數據移動到HDFS 中hive 設定的目錄下,因此,hive 不支持對數據的改寫和添加,所有的數據都是在加載的時候確定的。hive 的設計特點如下。 [3] 
● 支持創建索引,優化數據查詢。 [3] 
● 不同的存儲類型,例如,純文本文件、HBase 中的文件。 [3] 
● 將元數據保存在關係數據庫中,大大減少了在查詢過程中執行語義檢查的時間。 [3] 
● 可以直接使用存儲在Hadoop 文件系統中的數據。 [3] 
● 內置大量用户函數UDF 來操作時間、字符串和其他的數據挖掘工具,支持用户擴展UDF 函數來完成內置函數無法實現的操作。 [3] 
● 類SQL 的查詢方式,將SQL 查詢轉換為MapReduce 的job 在Hadoop集羣上執行。 [3] 

hive體系結構

主要分為以下幾個部分: [4] 
用户接口
用户接口主要有三個:CLI,Client 和 WUI。其中最常用的是 Cli,Cli 啓動的時候,會同時啓動一個 hive 副本。Client 是 hive 的客户端,用户連接至 hive Server。在啓動 Client 模式的時候,需要指出 hive Server 所在節點,並且在該節點啓動 hive Server。 WUI 是通過瀏覽器訪問 hive。 [4] 
元數據存儲
hive 將元數據存儲在數據庫中,如 mysql、derby。hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。 [4] 
解釋器、編譯器、優化器、執行器
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後由 MapReduce 調用執行。 [4] 
Hadoop
hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(不包含 * 的查詢,比如 select * from tbl 不會生成 MapReduce 任務)。 [4] 

hive數據模型

hive中包含以下四類數據模型:表(Table)、外部表(External Table)、分區(Partition)、桶(Bucket)。 [5] 
(1) hive中的Table和數據庫中的Table在概念上是類似的。在hive中每一個Table都有一個相應的目錄存儲數據。 [5] 
(2)外部表是一個已經存儲在HDFS中,並具有一定格式的數據。使用外部表意味着hive表內的數據不在hive的數據倉庫內,它會到倉庫目錄以外的位置訪問數據。 [5] 
外部表和普通表的操作不同,創建普通表的操作分為兩個步驟,即表的創建步驟和數據裝入步驟(可以分開也可以同時完成)。在數據的裝入過程中,實際數據會移動到數據表所在的hive數據倉庫文件目錄中,其後對該數據表的訪問將直接訪問裝入所對應文件目錄中的數據。刪除表時,該表的元數據和在數據倉庫目錄下的實際數據將同時刪除。 [5] 
外部表的創建只有一個步驟,創建表和裝入數據同時完成。外部表的實際數據存儲在創建語句。LOCATION參數指定的外部HDFS文件路徑中,但這個數據並不會移動到hive數據倉庫的文件目錄中。刪除外部表時,僅刪除其元數據,保存在外部HDFS文件目錄中的數據不會被刪除。 [5] 
(3)分區對應於數據庫中的分區列的密集索引,但是hive中分區的組織方式和數據庫中的很不相同。在hive中,表中的一個分區對應於表下的一個目錄,所有的分區的數據都存儲在對應的目錄中。 [5] 
(4)桶對指定列進行哈希(hash)計算,會根據哈希值切分數據,目的是為了並行,每一個桶對應一個文件。 [5] 
參考資料
  • 1.    萬川梅,謝正蘭編著.HADOOP應用開發實戰祥解(修訂版):中國鐵道出版社,2014.08:第24頁
  • 2.    萬川梅,謝正蘭編著.HADOOP應用開發實戰祥解(修訂版):中國鐵道出版社,2014.08:第188頁
  • 3.    《科技創新與應用》[J].高教學刊,2016,(第33期).
  • 4.    鮑亮,陳榮編著. 深入淺出雲計算[M]. 北京:清華大學出版社, 2012.10.第361頁
  • 5.    陶皖主編.雲計算與大數據:西安電子科技大學出版社,2017.01:第184頁