天天看點

資料庫必知詞彙:Hive

Hive是基于Hadoop的一個資料倉庫工具,用來進行資料提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模資料的機制。Apache Hive資料倉庫軟體有助于使用SQL讀取,寫入和管理駐留在分布式存儲中的大型資料集。 可以将結構投影到已經存儲的資料上。提供了指令行工具和JDBC驅動程式以将使用者連接配接到Hive。

Hive資料倉庫工具能将結構化的資料檔案映射為一張資料庫表,并提供SQL查詢功能,能将SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實作快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程式。

Hive提供了豐富的SQL查詢方式來分析存儲在Hadoop分布式檔案系統中的資料:可以将結構化的資料檔案映射為一張資料庫表,并提供完整的SQL查詢功能;可以将SQL語句轉換為MapReduce任務運作,通過自己的SQL查詢分析需要的内容,這套SQL簡稱Hive SQL,使不熟悉MapReduce的使用者可以很友善地利用SQL語言查詢、彙總和分析資料。而MapReduce開發人員可以把自己寫的Mapper和Reducer作為插件來支援Hive做更複雜的資料分析。

Hive SQL與關系型資料庫的SQL略有不同,但支援了絕大多數的語句如DDL、DML以及常見的聚合函數、連接配接查詢、條件查詢。它還提供了一系列工具進行資料提取轉化加載,用來存儲、查詢和分析存儲在Hadoop中的大規模資料集,并支援UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和USTF(User-Defined Table-Generating Function),也可以實作對Map和Reduce函數的定制,為資料操作提供了良好的伸縮性和可擴充性。

Hive并不适合那些需要低延遲的應用,例如,聯機事務處理(OLTP)。Hive查詢操作過程嚴格遵守Hadoop MapReduce 的作業執行模型,Hive将使用者的Hive SQL語句通過解釋器轉換為MapReduce作業送出到Hadoop叢集上,Hadoop監控作業執行過程,然後傳回作業執行結果給使用者。Hive并非為聯機事務處理而設計,Hive并不提供實時的查詢和基于行級的資料更新操作。Hive的最佳使用場合是大資料集的批處理作業,

Hive中包含以下四類資料模型:表(Table)、外部表(External Tablc)、分區(Partition)、桶(Bucket),具體解釋如下:

  • Hive中的Table和資料庫中的Table在概念上是類似的。在Hive中每一個Table都有一個相應的目錄存儲資料。
  • 外部表是一個已經存儲在HDFS中,并具有一定格式的資料。使用外部表意味着Hive表内的資料不在Hive的資料倉庫内,它會到倉庫目錄以外的位置通路資料。
  • 分區對應于資料庫中的分區列的密集索引,但是Hive中分區的組織方式和資料庫中的很不相同。在Hive中,表中的一個分區對應于表下的一個目錄,所有的分區的資料都存儲在對應的目錄中。
  • 桶對指定列進行哈希計算,會根據哈希值切分資料,目的是為了并行,每一個桶對應一個檔案。

資料來源:

Apache Hive

https://hive.apache.org/

萬川梅,謝正蘭編著.HADOOP應用開發實戰祥解(修訂版):中國鐵道出版社,2014.08

鮑亮,陳榮編著. 深入淺出雲計算[M]. 北京:清華大學出版社, 2012.10

陶皖主編.雲計算與大資料:西安電子科技大學出版社,2017.01

劉永增, 張曉景, 李先毅. 基于Hadoop/Hive的web日志分析系統的設計[C]// 中國教育和科研計算機網cernet學術年會. 2011.

高金标, 何利力, 鄒雲陽. 基于分布式存儲系統的Hive與Hbase的研究[J]. 工業控制計算機, 2015, v.28(12).