Hivemetastore三種配置方式
Apache Hive 是一個基於 Hadoop 的數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的 SQL 查詢功能,可以將 SQL 語句轉換為 MapReduce 任務進行運行。其核心組件之一是 Hive Metastore,用於存儲元數據信息,如表結構、分區信息等。本文將介紹 Hivemetore 的三種配置方式。
1. 內嵌式(Embedded Mode)
在內嵌模式下,Hive Metastore 和 Hive 客户端運行在同一進程中,這種方式適合於測試環境或小型部署。在這種模式下,Metastore 使用 Derby 數據庫作為後端存儲,默認情況下,Derby 數據庫是內嵌的,不需要額外的配置。
配置步驟
- 安裝 Hive:確保已經正確安裝了 Hive。
- 修改
hive-site.xml:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
- 啓動 Hive:
hive
2. 本地模式(Local Mode)
在本地模式下,Hive Metastore 服務與 Hive 客户端分開運行,但仍然在同一台機器上。這種方式適用於需要更高性能的開發或測試環境。Metastore 可以使用 MySQL、PostgreSQL 等關係型數據庫作為後端存儲。
配置步驟
- 安裝數據庫:選擇並安裝 MySQL 或 PostgreSQL。
- 創建數據庫和用户:
- 對於 MySQL:
CREATE DATABASE metastore;
CREATE USER 'hive'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'localhost';
FLUSH PRIVILEGES;
- 對於 PostgreSQL:
CREATE DATABASE metastore;
CREATE USER hive WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE metastore TO hive;
- 修改
hive-site.xml:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
- 啓動 Metastore 服務:
hive --service metastore &
- 啓動 Hive 客户端:
hive
3. 遠程模式(Remote Mode)
在遠程模式下,Hive Metastore 服務運行在獨立的服務器上,通過網絡與 Hive 客户端通信。這種方式適用於生產環境,可以提高系統的可擴展性和可靠性。
配置步驟
- 在 Metastore 服務器上安裝數據庫:選擇並安裝 MySQL 或 PostgreSQL。
- 創建數據庫和用户:同本地模式中的步驟。
- 修改
hive-site.xml:
- 在 Metastore 服務器上:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
- 在 Hive 客户端上:
<property>
<name>hive.metastore.uris</name>
<value>thrift://<metastore_server_ip>:9083</value>
</property>
- 啓動 Metastore 服務:
hive --service metastore &
- 啓動 Hive 客户端:
hive
Hive Metastore 是 Apache Hive 的核心組件之一,用於存儲元數據信息。Hive Metastore 可以配置為三種不同的模式:Embedded Metastore、Local Metastore 和 Remote Metastore。下面將分別介紹這三種配置方式,並提供相應的示例代碼。
1. Embedded Metastore
在 Embedded Metastore 模式下,Hive Metastore 與 Hive Server 運行在同一進程中,適用於開發和測試環境。
示例配置文件(hive-site.xml)
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value></value>
</property>
</configuration>
2. Local Metastore
在 Local Metastore 模式下,Hive Metastore 仍然運行在本地,但使用外部數據庫(如 MySQL)來存儲元數據。這種模式適合於生產環境中的小型集羣。
示例配置文件(hive-site.xml)
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_password</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value></value>
</property>
</configuration>
3. Remote Metastore
在 Remote Metastore 模式下,Hive Metastore 作為一個獨立的服務運行,可以被多個 Hive Server 共享。這種模式適合於大型生產環境。
啓動 Metastore 服務
首先,需要啓動一個獨立的 Metastore 服務。可以在 hive-site.xml 中配置 Metastore 服務的地址。
示例配置文件(hive-site.xml)
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_password</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
</configuration>
啓動 Metastore 服務
$HIVE_HOME/bin/hive --service metastore &
配置 Hive Server
在 Hive Server 的配置文件中,指定 Metastore 服務的地址。
示例配置文件(hive-site.xml)
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
</configuration>
Hive Metastore 是 Apache Hive 的核心組件之一,用於存儲元數據信息,如數據庫、表、列、分區等。Hive Metastore 可以配置為不同的模式來適應不同的使用場景和需求。以下是三種常見的配置方式及其對應的代碼示例:
1. 嵌入式(Embedded)模式
在嵌入式模式下,Metastore 和 Hive 服務運行在同一進程中。這種方式適用於小型測試環境或開發環境。
配置文件 hive-site.xml
<configuration>
<property>
<name>hive.metastore.uris</name>
<value></value>
<description>Thrift URI for the metastore service. Used by metastore client to connect to metastore server.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_password</value>
<description>password to use against metastore database</description>
</property>
</configuration>
2. 本地(Local)模式
在本地模式下,Metastore 服務運行在本地,但與 Hive 服務分開。這種方式適用於需要更高性能的測試環境或小型生產環境。
啓動 Metastore 服務
$HIVE_HOME/bin/hive --service metastore &
配置文件 hive-site.xml
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
<description>Thrift URI for the metastore service. Used by metastore client to connect to metastore server.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_password</value>
<description>password to use against metastore database</description>
</property>
</configuration>
3. 遠程(Remote)模式
在遠程模式下,Metastore 服務運行在獨立的服務器上,通過網絡與 Hive 服務通信。這種方式適用於大型生產環境,可以提供更好的性能和可擴展性。
啓動 Metastore 服務
在遠程服務器上啓動 Metastore 服務:
$HIVE_HOME/bin/hive --service metastore &
配置文件 hive-site.xml
在 Hive 客户端機器上配置 hive-site.xml:
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://remote_host:9083</value>
<description>Thrift URI for the metastore service. Used by metastore client to connect to metastore server.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://remote_host:3306/hive_metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_password</value>
<description>password to use against metastore database</description>
</property>
</configuration>
總結
- 嵌入式模式:適合小型測試和開發環境,Metastore 和 Hive 服務運行在同一進程中。
- 本地模式:適合需要更高性能的測試環境或小型生產環境,Metastore 服務運行在本地但與 Hive 服務分開。
- 遠程模式:適合大型生產環境,Metastore 服務運行在獨立的服務器上,通過網絡與 Hive 服務通信。
每種模式都有其適用的場景,選擇合適的配置方式可以更好地滿足不同的需求。