hive

hive

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

簡介

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函數的定制,為數據操作提供了良好的伸縮性和可擴展性。  

hive不适合用于聯機(online)事務處理,也不提供實時查詢功能。它最适合應用在基于大量不可變數據的批處理作業。hive的特點包括:可伸縮(在Hadoop的集群上動态添加設備)、可擴展、容錯、輸入格式的松散耦合。  

适用場景

hive 構建在基于靜态批處理的Hadoop 之上,Hadoop 通常都有較高的延遲并且在作業提交和調度的時候需要大量的開銷。因此,hive 并不能夠在大規模數據集上實現低延遲快速的查詢,例如,hive 在幾百MB 的數據集上執行查詢一般有分鐘級的時間延遲。  

因此,hive 并不适合那些需要高實時性的應用,例如,聯機事務處理(OLTP)。hive 查詢操作過程嚴格遵守Hadoop MapReduce 的作業執行模型,hive 将用戶的hiveSQL 語句通過解釋器轉換為MapReduce 作業提交到Hadoop 集群上,Hadoop 監控作業執行過程,然後返回作業執行結果給用戶。hive 并非為聯機事務處理而設計,hive 并不提供實時的查詢和基于行級的數據更新操作。hive 的最佳使用場合是大數據集的批處理作業,例如,網絡日志分析。  

設計特征

hive 是一種底層封裝了Hadoop 的數據倉庫處理工具,使用類SQL 的hiveSQL 語言實現數據查詢,所有hive 的數據都存儲在Hadoop 兼容的文件系統(例如,Amazon S3、HDFS)中。hive 在加載數據過程中不會對數據進行任何的修改,隻是将數據移動到HDFS 中hive 設定的目錄下,因此,hive 不支持對數據的改寫和添加,所有的數據都是在加載的時候确定的。hive 的設計特點如下。  

● 支持創建索引,優化數據查詢。  

● 不同的存儲類型,例如,純文本文件、HBase 中的文件。  

● 将元數據保存在關系數據庫中,大大減少了在查詢過程中執行語義檢查的時間。  

● 可以直接使用存儲在Hadoop 文件系統中的數據。  

● 内置大量用戶函數UDF 來操作時間、字符串和其他的數據挖掘工具,支持用戶擴展UDF 函數來完成内置函數無法實現的操作。  

● 類SQL 的查詢方式,将SQL 查詢轉換為MapReduce 的job 在Hadoop集群上執行。  

體系結構

主要分為以下幾個部分:  

用戶接口

用戶接口主要有三個:CLI,Client 和 WUI。其中最常用的是 Cli,Cli 啟動的時候,會同時啟動一個 hive 副本。Client 是 hive 的客戶端,用戶連接至 hive Server。在啟動 Client 模式的時候,需要指出 hive Server 所在節點,并且在該節點啟動 hive Server。 WUI 是通過浏覽器訪問 hive。  

數據存儲

hive 将元數據存儲在數據庫中,如 mysql、derby。hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。  

解釋器、編譯器、優化器、執行器

解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,并在随後由 MapReduce 調用執行。  

Hadoop

hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(不包含 * 的查詢,比如 select * from tbl 不會生成 MapReduce 任務)。  

數據存儲模型

hive中包含以下四類數據模型:表(Table)、外部表(External Table)、分區(Partition)、桶(Bucket)。  

(1) hive中的Table和數據庫中的Table在概念上是類似的。在hive中每一個Table都有一個相應的目錄存儲數據。  

(2)外部表是一個已經存儲在HDFS中,并具有一定格式的數據。使用外部表意味着hive表内的數據不在hive的數據倉庫内,它會到倉庫目錄以外的位置訪問數據。  

外部表和普通表的操作不同,創建普通表的操作分為兩個步驟,即表的創建步驟和數據裝入步驟(可以分開也可以同時完成)。在數據的裝入過程中,實際數據會移動到數據表所在的hive數據倉庫文件目錄中,其後對該數據表的訪問将直接訪問裝入所對應文件目錄中的數據。删除表時,該表的元數據和在數據倉庫目錄下的實際數據将同時删除。  

外部表的創建隻有一個步驟,創建表和裝入數據同時完成。外部表的實際數據存儲在創建語句。LOCATION參數指定的外部HDFS文件路徑中,但這個數據并不會移動到hive數據倉庫的文件目錄中。删除外部表時,僅删除其元數據,保存在外部HDFS文件目錄中的數據不會被删除。  

(3)分區對應于數據庫中的分區列的密集索引,但是hive中分區的組織方式和數據庫中的很不相同。在hive中,表中的一個分區對應于表下的一個目錄,所有的分區的數據都存儲在對應的目錄中。  

(4)桶對指定列進行哈希(hash)計算,會根據哈希值切分數據,目的是為了并行,每一個桶對應一個文件。  

相關詞條

相關搜索

其它詞條