天天看點

CDP 的 Hive Metastore 簡介

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。

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

托管表 位置屬性 注釋 行動
是的 遷移到CDP,例如從HDP或CDH叢集。 表存儲為外部表
表位置為空(null) 存儲在外部倉庫子目錄中的表* metastore.warehouse.external.dir

HMS 檢測用于與 HMS 進行互動的用戶端類型,例如 Hive 或 Spark,并将用戶端的功能與表要求進行比較。HMS 根據比較結果執行以下操作:

表要求 用戶端符合要求 ACID 表類型
用戶端可以寫入任何類型的 ACID 表 建立表失敗
用戶端可以寫入完整的 ACID 表 insert_only=true
用戶端可以寫入僅插入的 ACID 表

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

Spark has no access to table `mytable`. Clients can access this table only if
they have the following capabilities: CONNECTORREAD,HIVEFULLACIDREAD, HIVEFULLACIDWRITE,
HIVEMANAGESTATS, HIVECACHEINVALIDATE, . . .      

點選連結參與

阿裡雲CDP限時免費測試

啦~

https://survey.aliyun.com/apps/zhiliao/owtTaIQU3

釘釘掃描下方二維碼加入阿裡雲 Cloudera 企業資料雲交流群一起參與讨論吧!

CDP 的 Hive Metastore 簡介