一、Hive--Service Metastore简介
Hive--Service Metastore是Apache Hive的元数据存储系统。它是在Hive v0.6.0中引入的,Hive将所有元数据(表名、列名、列类型等)存储在Metastore中,这样用户就可以将它们用于不同的Hive实例。
Service Metastore由两个核心组件构成:Metastore server和Metastore client。Metastore server用于管理元数据,而Metastore client充当Hive client和Metastore server之间的HTTP层,它可以使Hive client与远程Metastore server通信。
二、Metastore server和Metastore client详解
1. Metastore server
Metastore server主要由以下组件构成:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-metastore</artifactId>
<version>2.3.2</version>
</dependency>
Metastore server是元数据的管理者。在Metastore中,它扮演着关键的角色:管理Hive表、分区、列和其他模式信息。
Metastore server使用RDBMS存储元数据。默认情况下,它使用Derby存储元数据。但是,可以在hive-site.xml文件中配置Hive以使用MySQL/MariaDB、PostgreSQL或Oracle等数据库。
2. Metastore client
Metastore client是Hive与Metastore server之间通信的HTTP层,它主要由以下组件构成:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-metastore</artifactId>
<version>2.3.2</version>
</dependency>
Metastore client是由Hive CLI、HiveServer2、Beeline等Hive组件使用的API套件。它使用Thrift协议定义API,可以基于Java、Python或Ruby等语言创建Hive client。
三、Metastore的配置和操作
1. Metastore的配置
要配置Hive以使用Metastore,需要修改hive-site.xml文件。以下是hive-site.xml文件中Metastore的默认配置:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>APP</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mine</value>
<description>password to use against metastore database</description>
</property>
要使用非默认RDBMS,用户可以按照以下步骤修改hive-site.xml文件:
1.启用JDBC Metastore
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
2.更改连接URL:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
</property>
3.修改自己的连接器/驱动程序
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
4.修改自己的数据库用户名和密码
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
2. Metastore的操作
在Hive中,我们可以使用以下命令操作Metastore的元数据:
1. 创建表
CREATE TABLE IF NOT EXISTS employee (
id INT,
name STRING,
age INT
)
2. 查看表结构
DESCRIBE employee;
3. 向表添加数据
INSERT INTO employee VALUES (1, 'tom', 22);
4. 查看表数据
SELECT * FROM employee;
5. 删除表
DROP TABLE IF EXISTS employee;
四、总结
通过本文的详细阐述,我们了解了Hive--Service Metastore的组件、使用场景、配置方法以及操作方式。它是Hive的核心组件之一,管理着Hive的元数据,使Hive能够读取和写入大数据存储和分析。希望本文对您有所帮助。