Hivemetastore三種配置方式

Apache Hive 是一個基於 Hadoop 的數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的 SQL 查詢功能,可以將 SQL 語句轉換為 MapReduce 任務進行運行。其核心組件之一是 Hive Metastore,用於存儲元數據信息,如表結構、分區信息等。本文將介紹 Hivemetore 的三種配置方式。

1. 內嵌式(Embedded Mode)

【詳解】Hivemetastore三種配置方式_Hive

在內嵌模式下,Hive Metastore 和 Hive 客户端運行在同一進程中,這種方式適合於測試環境或小型部署。在這種模式下,Metastore 使用 Derby 數據庫作為後端存儲,默認情況下,Derby 數據庫是內嵌的,不需要額外的配置。

配置步驟

  1. 安裝 Hive:確保已經正確安裝了 Hive。
  2. 修改 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>
  1. 啓動 Hive
hive

2. 本地模式(Local Mode)

【詳解】Hivemetastore三種配置方式_hive_02

在本地模式下,Hive Metastore 服務與 Hive 客户端分開運行,但仍然在同一台機器上。這種方式適用於需要更高性能的開發或測試環境。Metastore 可以使用 MySQL、PostgreSQL 等關係型數據庫作為後端存儲。

配置步驟

  1. 安裝數據庫:選擇並安裝 MySQL 或 PostgreSQL。
  2. 創建數據庫和用户
  • 對於 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;
  1. 修改 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>
  1. 啓動 Metastore 服務
hive --service metastore &
  1. 啓動 Hive 客户端
hive

3. 遠程模式(Remote Mode)

【詳解】Hivemetastore三種配置方式_java_03

在遠程模式下,Hive Metastore 服務運行在獨立的服務器上,通過網絡與 Hive 客户端通信。這種方式適用於生產環境,可以提高系統的可擴展性和可靠性。

配置步驟

  1. 在 Metastore 服務器上安裝數據庫:選擇並安裝 MySQL 或 PostgreSQL。
  2. 創建數據庫和用户:同本地模式中的步驟。
  3. 修改 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>
  1. 啓動 Metastore 服務
hive --service metastore &
  1. 啓動 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>

【詳解】Hivemetastore三種配置方式_Hive_04

Hive Metastore 是 Apache Hive 的核心組件之一,用於存儲元數據信息,如數據庫、表、列、分區等。Hive Metastore 可以配置為不同的模式來適應不同的使用場景和需求。以下是三種常見的配置方式及其對應的代碼示例:

1. 嵌入式(Embedded)模式

在嵌入式模式下,Metastore 和 Hive 服務運行在同一進程中。這種方式適用於小型測試環境或開發環境。

配置文件 hive-site.xml

【詳解】Hivemetastore三種配置方式_java_05


<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>

總結

【詳解】Hivemetastore三種配置方式_java_06

  • 嵌入式模式:適合小型測試和開發環境,Metastore 和 Hive 服務運行在同一進程中。
  • 本地模式:適合需要更高性能的測試環境或小型生產環境,Metastore 服務運行在本地但與 Hive 服務分開。
  • 遠程模式:適合大型生產環境,Metastore 服務運行在獨立的服務器上,通過網絡與 Hive 服務通信。

每種模式都有其適用的場景,選擇合適的配置方式可以更好地滿足不同的需求。