
Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。其核心组件之一是 Hive Metastore,用于存储元数据信息,如表结构、分区信息等。本文将介绍 Hivemetore 的三种配置方式。

在内嵌模式下,Hive Metastore 和 Hive 客户端运行在同一进程中,这种方式适合于测试环境或小型部署。在这种模式下,Metastore 使用 Derby 数据库作为后端存储,默认情况下,Derby 数据库是内嵌的,不需要额外的配置。
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 Metastore 服务与 Hive 客户端分开运行,但仍然在同一台机器上。这种方式适用于需要更高性能的开发或测试环境。Metastore 可以使用 MySQL、PostgreSQL 等关系型数据库作为后端存储。
CREATE DATABASE metastore;
CREATE USER 'hive'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'localhost';
FLUSH PRIVILEGES;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>hive --service metastore &hive
在远程模式下,Hive Metastore 服务运行在独立的服务器上,通过网络与 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><property>
<name>hive.metastore.uris</name>
<value>thrift://<metastore_server_ip>:9083</value>
</property>hive --service metastore &hiveHive Metastore 是 Apache Hive 的核心组件之一,用于存储元数据信息。Hive Metastore 可以配置为三种不同的模式:Embedded Metastore、Local Metastore 和 Remote Metastore。下面将分别介绍这三种配置方式,并提供相应的示例代码。
在 Embedded Metastore 模式下,Hive Metastore 与 Hive Server 运行在同一进程中,适用于开发和测试环境。
<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>在 Local Metastore 模式下,Hive Metastore 仍然运行在本地,但使用外部数据库(如 MySQL)来存储元数据。这种模式适合于生产环境中的小型集群。
<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>在 Remote Metastore 模式下,Hive Metastore 作为一个独立的服务运行,可以被多个 Hive Server 共享。这种模式适合于大型生产环境。
首先,需要启动一个独立的 Metastore 服务。可以在 hive-site.xml 中配置 Metastore 服务的地址。
<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>$HIVE_HOME/bin/hive --service metastore &在 Hive Server 的配置文件中,指定 Metastore 服务的地址。
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
</configuration>
Hive Metastore 是 Apache Hive 的核心组件之一,用于存储元数据信息,如数据库、表、列、分区等。Hive Metastore 可以配置为不同的模式来适应不同的使用场景和需求。以下是三种常见的配置方式及其对应的代码示例:
在嵌入式模式下,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>在本地模式下,Metastore 服务运行在本地,但与 Hive 服务分开。这种方式适用于需要更高性能的测试环境或小型生产环境。
$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>在远程模式下,Metastore 服务运行在独立的服务器上,通过网络与 Hive 服务通信。这种方式适用于大型生产环境,可以提供更好的性能和可扩展性。
在远程服务器上启动 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>
每种模式都有其适用的场景,选择合适的配置方式可以更好地满足不同的需求。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。