大数据-15-Hive 元数据管理与存储 Metastore Metadata 内嵌模式 本地模式 远程模式

300 阅读5分钟

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI篇持续更新中!(长期更新)

目前2025年06月13日更新到: AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖

💻 Java篇正式开启!(300篇)

目前2025年06月11日更新到: Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令 MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月13日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

Hive 的 Metastore 是管理元数据的核心组件,用于描述表结构与文件映射关系,是 SQL 查询能准确定位数据文件的基础。Metastore 有三种部署模式:内嵌模式适合本地测试,使用内置 Derby 数据库,仅支持单用户访问;本地模式将 Metastore 嵌入 Hive 进程,适合小型应用;远程模式则将 Metastore 独立为服务,支持多客户端访问,是生产环境推荐方式。在部署 Hive 集群时,需确保各节点配置一致、环境变量和 hive-site.xml 正确同步。

请添加图片描述

章节内容

上一节我们完成了:

  • Hive中数据导出:HDFS
  • HQL操作
  • 上传内容至Hive、增删改查等操作

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境。

  • 2C4G 编号 h121
  • 2C4G 编号 h122
  • 2C2G 编号 h123

在这里插入图片描述

Metastore

在Hive具体的使用中,首先面临的问题是如何定义表结构信息和结构化的数据映射成功。 所谓的映射指的是一种对应关系。在Hive中需要描述清楚表和文件之间的映射关系、列和字段之间的关系等等信息。 这描述映射关系的数据称为Hive的元数据。 所以此数据很重要,因为只有通过查询它才可以确定用户编写SQL和最终操作文件之间的关系。

Metastore 是 Hive 架构中的核心组件,专门用于存储元数据,比如数据库、表、分区、列、字段类型、表和 HDFS 文件之间的映射关系等。

什么是元数据

在 Hive 中执行的 SQL 查询,最终会转化为 MapReduce 或其他底层执行逻辑。而这个过程需要知道:

  • 表在哪里(HDFS 路径)
  • 有哪些字段、字段类型
  • 哪些是分区字段
  • 存储格式是 Text、ORC 还是 Parquet

这些信息就是 Hive 的 元数据,Metastore 就是存储这些信息的地方。

Metastore 的作用

  • 解析和验证 SQL:比如你写了 SELECT * FROM emp,Hive 先查 Metastore 看 emp 表是否存在,字段有哪些。
  • 生成执行计划:Hive 需要知道从哪个 HDFS 路径读取数据,以及怎么解码。
  • 支持多客户端共享:生产环境中,多个 HiveServer2、Spark、Presto 都可以共享同一个 Metastore。

Metastore 的三种部署方式

  • 内嵌模式 Embedded:默认使用 Derby 数据库,元数据与 HiveServer 进程共存;仅支持单用户,适合测试或本地学习
  • 本地模式 Local:Metastore 嵌入到 HiveServer2 中,每次启动 HiveServer2 都会一起启动 Metastore
  • 远程模式 Remote(推荐):Metastore 独立部署为服务,其他组件通过 Thrift 接口访问;适合 生产环境,高并发、集中管理

Metastore 实质上就是一个关系型数据库(MySQL、PostgreSQL、Derby 等),Hive 启动时会连接这个数据库,读取元数据。

Metastore三种形式

内嵌模式

内嵌模式是使用Derby数据库来存储元数据,而不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主HiveServer进程中。 该方案为默认,但一次只能和一个客户端连接,适合实验,不适合生产。

在这里插入图片描述

本地模式

本地模式不需要单独启动Metastore服务,而是和Hive在同一个进程里的Metastore服务。也就是说当启动Hive服务时,内部会启动一个Metastore服务。 在这里插入图片描述

远程模式

远程模式下,需要的单独运行 Metastore服务,每个客户端都在配置文件里配置连接到该Metastore的信息。(推荐生产环境使用) 在这里插入图片描述

配置环境

集群规划

在这里插入图片描述

同步文件

之前我们完成了单节点的 Hive 部署和测试,现在要改成多集群的。 你可以使用类似于下面的方式,将 Hive 的安装包等内容发送到别的节点上。

将之前的 Hive 文件拷贝到 h121、h122、h123中。 也就是现在要求我们集群中的三台节点都要拥有Hive环境 你可以通过类似于 SCP 的指令完成文件的传输,或者用脚本分发工具也可以。

scp apache-hive-2.3.9-bin.tar.gz root@h121.wzk.icu:/opt/software

确保你的三台机器都有了Hive的环境,同时不要忘记配置环境变量。 你需要回到之前的章节,完整一系列的配置。不然后续无法进行。

h121节点

在这里插入图片描述

h122节点

在这里插入图片描述

h123节点

在这里插入图片描述

配置注意

这里多唠叨几句,h121、h122、h123的 hive-site.xml 的内容是一样的。

  • Hive 环境变量!!!
  • hive-site.xml 配置一样!!!
  • JDBC 驱动也别忘了!!!

在这里插入图片描述

启动服务

h121 & h123

在 h121 和 h123 上启动 MetaData 服务

# 启动 metastore 服务
nohup hive --service metastore &

在这里插入图片描述 在这里插入图片描述

# 查询9083端口(metastore服务占用的端口)
lsof -i:9083

可以看到服务已经正常的启动了, 查询到了端口服务。 在这里插入图片描述

h122

<!-- hive metastore 服务地址 -->
<property>
        <name>hive.metastore.uris</name>
        <value>thrift://h121.wzk.icu:9083,thrift://h123.wzk.icu:9083</value>
</property>

此时我们在 h122 上启动 Hive

hive
SELECT * FROM emp;

查看连接

我们分别在 h121、h122、h123 上查看端口的信息

lsof -i:9083

在这里插入图片描述