一、概述
Metastore是Hive表的元数据存储仓库,它是一个独立的进程,处理包括表名、列名、数据类型和表的存储位置在内的各种元数据。
Metastore 可能是独立的进程,也可能与 Hive Server 2 在同一个进程中运行。元数据被存储在一个关系型数据库中,如 MySQL 或 PostgreSQL。通过使用 Metastore,用户可以在 Hive 中创建表并访问和管理数据。
二、Metastore的架构
Metastore 的架构主要由以下几个部分组成:
- Metastore Server
- Metastore Client
- 数据库
- Filesystem
1. Metastore Server
Metastore Server 是 Hive 元数据存储库的主体。它是一个独立的进程,用于管理并处理元数据,支持各种元数据操作,例如创建表、更新表结构和删除表等。Metastore Server 运行在一个单独的 JVM 中,与存储元数据的 RDBMS 直接通信。
2. Metastore Client
Metastore Client 用于管理和处理 Hive 表的元数据。当用户在 Hive 中创建、更新或删除 Hive 表时,Metastore Client 与 Metastore Server 直接通信。Metastore Client 运行在一个单独的 JVM 中,与存储元数据的 RDBMS 直接通信。
3. 数据库
Metastore 使用 MySQL、PostgreSQL、MariaDB、Oracle 或 Derby 等关系型数据库存储 Hive 表的元数据。
4. Filesystem
Filesystem 用于存储 Hive 表的数据。当 Hive 表被创建时,Filesystem 会创建一种数据存储格式和存储位置,并将其存储在 Hive 配置中指定的 HDFS、S3、Azure Blob 存储或本地文件系统中。
三、Metastore的作用
1. 管理 Hive 表的元数据
元数据是描述 Hive 表的信息,包括字段类型、位置、格式等,元数据是 Hive 表的关键。Metastore 负责维护所有 Hive 表的元数据,可以说,没有 Metastore,就没有 Hive。
2. 管理 Hive 表的权限
Metastore 还负责管理表的所有者和权限。在 Hive 中,通过为 Hive 表设置 ACL(访问控制列表),Metastore 可以确定用户或组对 Hive 表的访问权限。
3. 帮助优化 Hive 查询
Metastore 可以为 Hive 表提供统计信息,这些统计信息包括表中记录数、字段数量、字段长度、最小值、最大值等。通过使用这些信息,Hive 可以优化查询并提高查询性能。
4. 支持扩展
Metastore 支持用户定义的表属性和扩展的元数据存储,这意味着用户可以将其自己的元数据存储在 Metastore 中,从而更好地管理和使用他们的 Hive 表。
四、案例:使用Metastore创建Hive表
Hive 的主要作用是让开发人员能够使用 SQL 语言操作 Hadoop,简化 Hadoop 的使用。其中,Metastore 负责维护所有 Hive 表的元数据。
1. 配置Metastore
首先需要配置 Metastore Server,为了演示方便,我们选用MySQL 作为存储 Hive 表元数据的 RDBMS。
创建 MySQL 数据库
CREATE DATABASE metastore_db;
创建 MySQL 用户
CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'hivepassword'; GRANT ALL PRIVILEGES ON metastore_db.* TO 'hiveuser'@'localhost'; FLUSH PRIVILEGES;
创建数据库表结构并初始化
在 Hive 安装目录下的 scripts/metastore/upgrade/mysql/ 中有一个脚本 hive-schema-2.1.0.mysql.sql,用它创建数据库表结构。
启动 Metastore Server
执行以下命令启动 Metastore Server,它将绑定在 localhost:9083 端口上:
hive --service metastore
2. 创建Hive表
创建一个名为 employee 的 Hive 表,表有两个字段 ID 和 Name:
CREATE TABLE employee ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
3. 查看Hive表的元数据
使用 show create table employee 命令查看表的创建语句和元数据:
SHOW CREATE TABLE employee;
4. 修改Hive表的元数据
如果需要修改 Hive 表的元数据,可以使用 ALTER TABLE 命令进行更改,例如:
ALTER TABLE employee ADD age INT;
5. 删除Hive表
如果要删除表,可以使用DROP TABLE命令。运行命令后,Hive 仅删除表的元数据,而不删除表的数据:
DROP TABLE employee;
五、总结
Metastore 是 Hive 表的元数据存储仓库,用于管理 Hive 表的元数据、权限和优化 Hive 查询。Metastore 与 Hive Server 2 独立运行,元数据存储在关系型数据库中,支持用户自定义的表属性和元数据存储扩展。Metastore 是使用 Hive 的关键部分,它简化了 Hadoop 的使用和数据管理。