hive用戶接口、元數據、及數據模型等介紹

可以帶着下面問題來閱讀:
1.Hive用戶接口主要有幾個?分別是什麼?常用幾個?
2.能否通過界面操作HIVE?
3.Hive元數據通常存儲在什麼地方?
4.HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成靠什麼完成?
5.生成的查詢計劃存儲在什麼位置?
6.Hive 將元數據存儲在 RDBMS 中,有三種模式可以連接到數據庫?
分別哪幾種?
7.Hive數據模型都包含什麼?
8.External Table的指向什麼數據?





同時閱讀本文需要了解的概念
1.什麼元數據?
主要是描述數據屬性的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件紀錄等功能。

2.Partition是指分區的意思




Hive 的結構如圖所示,



主要分爲以下幾個部分:

  • 用戶接口,包括 CLI,Client,WUI
  • 元數據存儲,通常是存儲在關係數據庫如 mysql, derby 中。
  • 解釋器、編譯器、優化器、執行器。
  • Hadoop:用 HDFS 進行存儲,利用 MapReduce 進行計算。



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

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

解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後有 MapReduce 調用執行。
Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from tbl 不會生成 MapRedcue 任務)。


----------------------------------------------------------------------------------------------------------------------------------------------

Hive 將元數據存儲在 RDBMS 中,有三種模式可以連接到數據庫:

Single User Mode: 此模式連接到一個 In-memory 的數據庫 Derby,一般用於 Unit Test。



Multi User Mode:通過網絡連接到一個數據庫中,是最經常使用到的模式。




Remote Server Mode:用於非 Java 客戶端訪問元數據庫,在服務器端啓動一個 MetaStoreServer,客戶端利用 Thrift 協議通過 MetaStoreServer 訪問元數據庫。




Hive 的數據存儲

首先,Hive 沒有專門的數據存儲格式,也沒有爲數據建立索引,用戶可以非常自由的組織 Hive 中的表,只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。

其次,Hive 中所有的數據都存儲在 HDFS 中,Hive 中包含以下數據模型:Table,External Table,Partition,Bucket。

Hive 中的 Table 和數據庫中的 Table 在概念上是類似的,每一個 Table 在 Hive 中都有一個相應的目錄存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑爲:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的 Table 數據(不包括 External Table)都保存在這個目錄中。

Partition 對應於數據庫中的 Partition 列的密集索引,但是 Hive 中 Partition 的組織方式和數據庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,所有的 Partition 的數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, ctry = US 的 HDFS 子目錄爲:/wh/pvs/ds=20090801/ctry=US;對應於 ds = 20090801, ctry = CA 的 HDFS 子目錄爲;/wh/pvs/ds=20090801/ctry=CA
Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是爲了並行,每一個 Bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值爲 0 的 HDFS 目錄爲:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值爲 20 的 HDFS 目錄爲:/wh/pvs/ds=20090801/ctry=US/part-00020

External Table 指向已經在 HDFS 中存在的數據,可以創建 Partition。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。
Table 的創建過程和數據加載過程(這兩個過程可以在同一個語句中完成),在加載數據的過程中,實際數據會被移動到數據倉庫目錄中;之後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。

External Table 只有一個過程,加載數據和創建表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章