【详解】Hivemetastore三种配置方式
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 服务通信。
每种模式都有其适用的场景,选择合适的配置方式可以更好地满足不同的需求。
- 点赞
- 收藏
- 关注作者




评论(0)