写点什么

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

作者:武子康
  • 2025-06-18
    美国
  • 本文字数:2121 字

    阅读完需:约 7 分钟

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

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

🚀 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


hiveSELECT * FROM emp;
复制代码

查看连接

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


lsof -i:9083
复制代码



发布于: 刚刚阅读数: 3
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-15-Hive 元数据管理与存储 Metastore Metadata 内嵌模式 本地模式 远程模式_大数据_武子康_InfoQ写作社区