CDP的Hive Metastore簡介

Hive Metastore (HMS) 是一種服務,用於在後端 RDBMS(例如 MySQL 或 PostgreSQL)中儲存與 Apache Hive 和其他服務相關的元資料。Impala、Spark、Hive 和其他服務共享元儲存。與 HMS 的連線包括 HiveServer、Ranger 和代表 HDFS 的 NameNode。

Beeline、Hue、JDBC 和 Impala shell 客戶端透過 thrift 或 JDBC 向 HiveServer 發出請求。HiveServer 例項向 HMS 讀/寫資料。預設情況下,冗餘的 HMS 以主動/主動模式執行。物理資料駐留在後端 RDBMS 中,一個用於 HMS的RDBMS。所有的 HMS 例項使用相同的後端資料庫。一個單獨的 RDBMS 支援安全服務,例如 Ranger。在任何給定時間,所有連線都路由到單一的 RDBMS 服務。HMS 透過thrift與 NameNode 對話,並充當 HDFS 的客戶端。

CDP的Hive Metastore簡介

HMS 直接連線到 Ranger 和 NameNode (HDFS),HiveServer 也是如此,但為簡單起見,該圖中並未顯示。後端的一個或多個 HMS 例項可以與其他服務(例如 Ranger)通訊。

HMS表的儲存

當您執行CREATE TABLE語句或將表遷移到Cloudera Data Platform時,您需要了解HMS如何儲存Hive表。語句的成功或失敗、結果表型別和表位置取決於許多因素。

HMS 表的轉換

HMS包含有關您建立的表的以下Hive元資料:

·      表的定義

·      列名

·      資料型別

·      中央的Schema儲存庫中的註釋

當您在CREATE TABLE語句中使用EXTERNAL關鍵字時,HMS會將表儲存為外部表。當您省略EXTERNAL關鍵字並建立託管表或攝取託管表時,HMS可能會將錶轉換為外部表,或者建立表可能會失敗,這具體取決於表的屬性。影響錶轉換的一個重要表屬性是ACID或非ACID表型別:

非ACID

表屬性不包含任何設定為true的ACID相關屬性。例如,該表不包含這樣的屬性transactional=true或insert_only=true

ACID

表屬性確實包含一個或多個設定為true的ACID屬性。

完全的ACID

表屬性包含transactional=true但不包含insert_only=true

僅插入的ACID

表屬性包含insert_only=true。

以下矩陣顯示了表型別以及是否支援位置屬性。

HMS 檢測與 HMS 互動的客戶端型別,例如 Hive 或 Spark,並將客戶端的能力與表的需求進行比較。HMS 根據比較結果執行以下操作:

例如,如果Spark客戶端不具備所需的功能,則會出現以下型別的錯誤訊息: