天天看點

hive jdbc驅動_Hive中繼資料服務MetaStore

hive jdbc驅動_Hive中繼資料服務MetaStore

1. 概念

MetaSore 是 Hive 中繼資料存儲的地方。Hive 資料庫、表、函數等的定義都存儲在 Metastore 中。根據系統配置方式,統計資訊和授權記錄也可以存儲在此處。Hive 或者其他執行引擎在運作時使用此資料來确定如何解析,授權以及有效執行使用者查詢。

MetaStore 分為兩個部分:服務和背景資料的存儲。

2. 配置參數

這裡隻會展示與 MetaStore 相關的配置參數,與 MetaSote 不相關的配置參數可以在這查閱。

hive jdbc驅動_Hive中繼資料服務MetaStore

Hive MetaSote 是無狀态的,是以可以有多個執行個體來實作高可用性。使用 hive.metastore.uris 可以指定多個遠端 MetaStore。Hive 将預設使用清單中的第一個,但會在連接配接失敗時随機選擇一個,并嘗試重新連接配接。

3. 部署模式

MetaStore 分為三種部署模式:内嵌模式、本地模式以及遠端模式。

3.1 内嵌MetaStore

預設情況下,MetaStore 服務和 Hive 服務運作在同一個 JVM 中,包含一個内嵌的以本地磁盤作為存儲的 Derby 資料庫執行個體。

hive jdbc驅動_Hive中繼資料服務MetaStore

使用内嵌的 MetaStore 是 Hive 入門最簡單的方法。但是,每次隻有一個内嵌的 Derby 資料庫可以通路某個磁盤上的資料庫檔案,一次隻能有一個程序可以連接配接到資料庫,是以它并不是一個實際的解決方案,但對于單元測試來說效果很好,并不适合在生産環境使用。

hive.metastore.uris      javax.jdo.option.ConnectionURL    jdbc:derby:;databaseName=metastore_db;create=true        javax.jdo.option.ConnectionDriverName    org.apache.derby.jdbc.EmbeddedDriver    hive.metastore.warehouse.dir  /user/hive/warehouse
           

3.2 本地MetaStore

如果要支援多會話(以及多租戶),需要使用一個獨立的資料庫。這種配置方式成為本地配置,因為 MetaStore 服務仍然和 Hive 服務運作在同一個程序中,但連接配接的卻是另一個程序中運作的資料庫,在同一台機器上或者遠端機器上。

hive jdbc驅動_Hive中繼資料服務MetaStore

對于獨立的 MetaStore,MySQL 是一種很受歡迎的選擇。本執行個體我們 MySQL 為例,具體看看如何配置:

hive.metastore.uris      javax.jdo.option.ConnectionURL  jdbc:mysql://localhost:3306/hive_meta?createDatabaseIfNotExist=true      javax.jdo.option.ConnectionDriverName  com.mysql.cj.jdbc.Driver        javax.jdo.option.ConnectionUserName  root        javax.jdo.option.ConnectionPassword  root    hive.metastore.warehouse.dir  /user/hive/warehouse  hive.metastore.port  9083
           

在本地模式下不需要配置 hive.metastore.uris,預設為空表示是本地模式。

如果選擇 MySQL 作為 MetaStore 存儲資料庫,需要提前将 MySQL 的驅動包拷貝到 $HIVE_HOME/lib目錄下。

JDBC 連接配接驅動類視情況決定選擇 com.mysql.cj.jdbc.Driver 還是 com.mysql.jdbc.Driver。

3.3 遠端MetaStore

在遠端模式下,MetaStore 服務和 Hive 服務運作在不同程序中。CLI、HiveServer2、HCatalog、Impala 以及其他程序使用 Thrift API(使用 hive.metastore.uris 屬性配置)與 MetaStore 服務通信。MetaStore 服務通過 JDBC 與 MetaStore 資料庫進行通信(使用 javax.jdo.option.ConnectionURL 屬性配置):

hive jdbc驅動_Hive中繼資料服務MetaStore

在這種情況下,我們還可以單獨部署一台 MetaStore 伺服器,以提供更高可用性。這也可以有更好的可管理性/安全性,因為資料庫層可以完全防火牆關閉。用戶端不再需要與每個 Hiver 使用者共享資料庫憑據即可通路元存儲資料庫。

Hive MetaStore 服務端配置:

javax.jdo.option.ConnectionURL  jdbc:mysql://localhost:3306/hive_meta?createDatabaseIfNotExist=true      javax.jdo.option.ConnectionDriverName  com.mysql.cj.jdbc.Driver        javax.jdo.option.ConnectionUserName  root        javax.jdo.option.ConnectionPassword  root    hive.metastore.warehouse.dir  /user/hive/warehouse  hive.metastore.port  9083
           

Hive MetaStore用戶端配置:

hive.metastore.uris  thrift://xxx:9083      hive.metastore.warehouse.dir  /user/hive/warehouse
           

4. 啟動服務

我們可以通過執行以下指令來啟動MetaStore服務:

hive --service metastore -p 9083 &
           

如果我們在 hive-site.xml 配置檔案中指定了 hive.metastore.uris 的 port:

hive.metastore.uris  thrift://xxx:9083
           

我們就可以不指定端口進行啟動:

hive --service metastore &
           
注意用戶端中的端口配置需要和啟動監聽的端口一緻。
hive jdbc驅動_Hive中繼資料服務MetaStore

參考:AdminManual Metastore Administration