hive 架构及 metastore 功能简单介绍

news2025/3/12 13:46:41

这两天在调研用 java 怎么能通过 hive metastore 将 hive 表中的数据读出来(不能用 hive2),最好是能直接支持 sql 查询。各种查跟尝试,最终确定这条路走不通。期间研究了下 hive 的内部架构,其实就是看了一遍官方文档。记录下怕忘了。

hive 中主要有两个组件 hive server2hive metastore ,前者负责对外提供 DML 服务,后者记录了数据的元信息,在 sql 生成执行计划时为其提供依据。(为什么从 metastore 中查不了表中的数据,因为人家压根没存)。


hive 架构

在这里插入图片描述

这张图是从官网截的。里面展示了主要的组件以及它跟 hadoop(spark) 的交互。主要组件如下:

  • UI:用户提交查询或者其他操作给系统的接口,2011年以后支持命令行和 web GUI 两种操作接口。
  • Driver:该组件接收用户的操作请求(查询),支持来自 JDBC/ODBC 接口的请求,创建 session,执行请求并将结果返回。
  • Compiler:该组件在 metastore 的协助下解析查询语句,对不同的查询块和查询语句做语法分析并产生执行计划。
  • Metastore:该组件存储了数仓中全部表的结构信息和分区信息,包括列以及列类型信息。读写数据时所需的序列化和反序列化器,以及数据在HDFS上的位置信息。metastore 存储数据的元信息而非数据本身。
  • Execution Engine: 该组件负责执行由 compiler 产生的执行计划(由多个stage构成的有向无环图)。它管理着执行计划中不同 stage之间的依赖关系并且在恰当的系统组件中执行 stage。

上图也展示了典型的查询操作的执行过程。通过交互接口将查询请求提交到 Driver(step 1)。Driver 为查询语句创建 session 并将其发送到 compiler 生成执行计划 (step 2)。compiler 从 metastore 中获取必要的元信息(steps 3 and 4)。compiler 生成的查询计划是由多个 stage 构成的有向无环图,并且每个 stage 都是将是一个 mapreduce 任务。Execution Engine 管理并提交这些 stage 到正确的组件(steps 6, 6.1, 6.2 and 6.3)。图中所画的 stage 被提交到 hadoop 上执行,而且是早期的 hadoop (目前已不被使用),也可以将 stage 提交到 spark 执行。每个任务执行时读取 hive 表中的数据实际上是使用该表对应的反序列化器直接从 HDFS 上读取数据,并且操作这些数据。生成的中间输出又被使用序列化器写在了 HDFS 的临时文件中供后续使用。对于 DML 操作最终的临时文件会被移动到表的位置,该方案确保了不会读到脏数据。对于查询请求,执行引擎直接从 HDFS 上读取最终文件,并将结果返回给 Driver(steps 7, 8 and 9)。


Hive 数据模型

HIve 中的数据被组织成:

  • Table:HIve 表类似于关系型数据库表,filtered, projected, joined 和 union 这些功能都有,表中的数据直接存储在 HDFS 上。支持外表。
  • Partitions:表中的数据可以拥有一个或多个分区,分区决定的数据在 HDFS 上如何存储,分区相同的数据存储在同一目录下。当存在多个分区时,会出现目录嵌套。通常会以时间作为分区。
  • Buckets:这个概念翻译成中文叫 块、桶、有时候也叫分区,但”分区“的称呼容易和上面的概念混淆。表中同一个分区分数据会被按照某个列的 hash 值再进一步划分成块,每一块作为一个单独的文件。最终的样子是 表中相同分区的数据存储在同一目录下,该目录下有好多个文件。块的出现提高了查询的效率。

Metastore

设计初衷

Hive Metastore的设计初衷是为了解决Hive中表和分区的元数据管理问题。在Hive中,表和分区的元数据包括表名、列名、数据类型、分区键、存储位置等信息,这些元数据需要被存储和管理。Hive Metastore就是为了管理这些元数据而设计的。在没有Hive Metastore的情况下,Hive会将表和分区的元数据存储在HDFS的元数据文件中,这些文件通常被称为Hive元数据存储目录。Hive会在该目录下创建一个与表名相同的目录,并在该目录下创建一个名为“_metadata”的文件,该文件包含表的元数据信息,如表名、列名、数据类型等。对于分区,Hive会在表的元数据文件中记录分区键和分区值,但是不会记录分区的存储位置。因此,在没有Hive Metastore的情况下,用户需要手动管理分区的存储位置,这可能会导致分区管理的不便和效率低下。

具体来说,用户需要在HDFS中为每个分区创建一个目录,并将该分区的数据存储在该目录下。例如,如果有一个名为“sales”的表,其中包含一个名为“2019”的分区,用户可以按照以下步骤手动管理该分区的存储位置:

  1. 在HDFS中创建一个名为“sales”的目录,该目录将用于存储“sales”表的数据。
  2. 在“sales”目录下创建一个名为“2019”的目录,该目录将用于存储“2019”分区的数据。
  3. 将“2019”分区的数据存储在“sales/2019”目录下。

在手动管理分区存储位置时,需要注意以下几点:

  1. 分区目录的命名必须与分区键的值相同,例如,“2019”分区的目录名必须为“2019”。
  2. 分区目录必须位于表的存储目录下,例如,“2019”分区的目录必须位于“sales”表的存储目录下。
  3. 分区目录的权限必须与表的存储目录相同,以确保Hive可以访问该目录中的数据。

Metastore 如何管理元数据和分区?

  1. 存储表和分区元数据:Hive Metastore可以存储表和分区的元数据信息,包括表名、列名、数据类型、分区键、存储位置等。当用户创建或修改表和分区时,Hive Metastore会自动更新元数据信息。
  2. 支持元数据查询:Hive Metastore可以支持元数据查询,用户可以通过Hive SQL语句查询表和分区的元数据信息。Hive Metastore会自动将查询转换为对元数据存储的操作,从而实现对元数据的高效查询。
  3. 支持元数据修改:Hive Metastore可以支持元数据修改,用户可以通过Hive SQL语句修改表和分区的元数据信息。Hive Metastore会自动将修改转换为对元数据存储的操作,从而实现对元数据的高效修改。
  4. 支持元数据版本控制和事务管理:Hive Metastore可以支持元数据版本控制和事务管理,用户可以通过Hive SQL语句对元数据进行版本控制和事务管理,从而保证元数据的一致性和可靠性。
  5. 管理分区存储位置:Hive Metastore可以自动管理分区的存储位置,当用户创建或修改分区时,Hive Metastore会自动将分区数据存储在正确的位置。用户无需手动管理分区的存储位置,从而提高了分区管理的效率和可靠性。
  6. 支持分区查询:Hive Metastore可以支持分区查询,用户可以通过Hive SQL语句查询分区数据。Hive Metastore会自动将查询转换为HDFS文件系统的操作,从而实现对分区数据的高效查询。
  7. 支持分区权限控制:Hive Metastore可以支持分区权限控制,用户可以通过Hive SQL语句设置分区的访问权限,从而保护分区数据的安全性。

总之,Hive Metastore可以自动管理分区的存储位置和元数据信息,从而提高了分区管理的效率和可靠性。同时,Hive Metastore还支持分区查询和权限控制等功能,为用户提供了更加全面的分区管理解决方案和更搞笑的查询效率。

metadata 对象

  • Database:表的命名空间。
  • Table:表的 Metastore 中包含了所有列、owner、存储、序列化与反序列化信息,还可以继续包含用户指定的键值对。存储信息包括表中数据的位置信息、文件的输入输出格式、桶信息。所有的元信息在表被创建时就生成并且存储了。
  • Partition:每个分区都有自己的列信息、序列化和反序列化以及存储信息。这么做是为了在不影响了老分区的前提下修改 schema。

几个小问题

1. hive metastore 比 hive server2 有什么区别?

功能不一样,hive2 对外提供数据查询功能,Metastore 管理 hive表的元数据信息,对外提供元数据信息查询功能。

2. 通过 Hive Metastore 能查询表中的数据吗?

不能。通过 Hive Metastore 本身是不能查询表中的数据的,因为 Hive Metastore 只是 Hive 的元数据存储服务,它负责管理 Hive 表的元数据信息,包括表的结构、分区信息、表的位置等,而不是存储表中的实际数据。要查询 Hive 表中的数据,需要使用 hive2 查询。在使用 Hive 查询服务时,它们会通过 Hive Metastore 获取表的元数据信息,包括表的结构、分区信息、表的位置等,然后根据这些信息从存储系统中读取表中的实际数据。因此,Hive Metastore是Hive查询服务的一个重要组件,但它本身并不能查询表中的数据。

3. 为什么 spark 可以通过 Hive Metastore 读取出表中的数据?

Spark 可以通过 Hive Metastore 读取 Hive 表中的数据,是因为 Spark SQL 和 Hive 都是基于Hadoop生态系统的,它们共享Hadoop的存储和计算资源。具体来说,Spark SQL可以通过Hive Metastore获取Hive表的元数据信息。也就是说 spark 知道它要使用的数据有哪些并且在哪里存放着,接下来 spark 任务自己就到 HDFS 上读数据了,此时不用再使用 hive2,而且整个读写与计算的过程都是在集群内,数据安全有保证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业微信也能接入ChatGPT啦~你也能成功,步骤超详细~

文章目录 配置企业微信创建企业创建应用 配置项目一、OpenAI账号注册二、克隆项目代码三、复制配置文件四、企业微信配置 服务器购买运行项目安装Python安装核心依赖启动项目 个人微信绑定 上次我把ChatGPT接入了微信(请看这篇文章当ChatGpt接入微信群之后&#xff…

【王道·操作系统】第二章 进程管理【未完】

一、进程的基本概念 1.1 进程的概念 程序:静态的,存放在磁盘里的可执行文件,是一系列的指令集合进程Process:动态的,是程序的一次执行过程 1.2 进程的组成 数据结构PCB(process control block),即进程控…

再谈sqlserver事务

事务没提交时,自增字段的数据已经生成 id 3, 此时 脏读数据 select with(nolock) 你获取的id是3 如果 rollback后 我重新提交插入数据,id3 的数据没了,变成了 4 因此,nolock允许脏的语句…

如何在华为OD机试中获得满分?Java实现【查找重复代码】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 小陈负责维护项目中的代…

电子劳动合同如何签订才能生效呢?四步就能教会你!

根据人力资源社会保障部发布的《电子劳动合同订立指引》规定:用人单位与劳动者订立电子劳动合同的,要通过电子劳动合同订立平台订立。 电子劳动合同订立平台要通过有效的现代信息技术手段提供劳动合同订立、调取、储存、应用等服务,具备身份…

前端正确处理“文字溢出”的思路

目录 前言 一. 组件效果预览 二. 单行溢出的处理 三. 前期准备 四. 理清思路 五. 完成 autoEllipsis 函数 六. 保留后缀的实现 七. 源码 八. 优化点 前言 最近在项目中需要做到类似于 Mac 下这种,当屏幕宽度足以容下当前文件名称的时候,文件名称…

小心!认证中的这几个坑别再踩了

【小心!认证中的这几个坑别再踩了】 1.三天拿证不可信! 想要今天办理、明天拿证是不可能实现的。一个认证需要经过前期的材料准备、现场审核、提交报告、颁发证书这一整套流程,拿FSC认证来说,就算所有环节都顺利完成,也…

网络安全入门学习路线,CSDN最全!建议收藏!

前言 网络安全行业热度越来越高,我也因此对这个领域充满了好奇。但是我也是一个完全的门外汉,从零开始学习网络安全有多难?下面是我的经验总结。 第一阶段:入门 我的第一步是寻找网络安全的入门书。推荐《黑客攻防技术宝典&…

Revit被遮挡的基础及快速构件显隐

一、Revit被遮挡的基础 在设计中,常常会有某些构件被上部的其他构件遮挡住的情况。在当前的多数样板中,这类构件会以隐藏线的模式表示出来。如下图所示,某设备下有四个条形设备基础。 这些基础被设备挡住的部分就以虚线的”隐藏线“样式显示在…

开发敏捷高效 | 云原生应用开发与运维新范式

5 月 18 日,腾讯云举办了 Techo Day 腾讯技术开放日,以「开箱吧!腾讯云」为栏目,对外发布和升级了腾讯自研的一系列云原生产品和工具。其中,腾讯云开发者产品中心总经理刘毅围绕“开发敏捷高效”这一话题,分…

三天吃透Java面试八股文(2023最新整理)

文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Java的特点 Java是一门面向对象的编程语言。面…

属实不赖!Alibaba开源GitHub星标114K微服务架构全彩进阶手册

开篇必读: 在当今的数字化经济时代,微服务架构已经成为公司业务构建的主流架构模式,代表了未来的技术发展趋势,同时微服务也成为开发者的必备技能。 本书从微服务架构的设计理念和方法论切入,从不同角度全面介绍微服…

Flink第七章:状态编程

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 Flink第六章:多流操作 Flink第七章:状态编程 文章目录 系列文章目录前言一、Keyed State(按键分区)1.KeyedStateTest.scala2.PeriodicPVEx…

土壤热通量传感器的应用

土壤热通量传感器又称“土壤热通量板”、“热流计”,主要用于测量土壤的能量平衡和土壤层的热导率。土壤热通量传感器采用热电堆测量温度梯度,该热电堆有两种不同的金属材料组成。热电堆探测器接受热辐射,热辐射能使两个不同材料的结点之间产…

如何在华为OD机试中获得满分?Java实现【单核CPU任务调度】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 现在有一个CPU和一些任务…

每天一道面试题之==和equals的区别是什么?

==和equals的区别是什么? ""是一个关系运算符,关系运算符可以用来进行数据和数据之间的比较,而在java中数据类型大致可以分为两大类分别是基本数据类型和引用数据类型。 基本数据类型包含 byte&#xff0c…

谢谢所有可爱的粉丝友友们

前言: 其实我很早之前就申请了CSDN账号,其中陆陆续续也在写博客,但是没有坚持下来,大家可以看到我的前期博客,少之又少,我甚至只要看一下我的博客内容,我就知道我当时在哪里,我当时在…

[RSA议题分析] eBPF Warfare - Detecting Kernel eBPF Rootkits with Tracee

文章目录 简介议题分析基础知识用户空间与内核空间hookrootkit追踪技术 eBPF架构Tracee - 一个运行时安全检查工具 RootKit种类与各个阶段的攻防LD_PRELOAD RootKitKernel Module RooKitKernel RootKit HidingKernel RootKit Hooksyscall table hookingfile operations hooking…

<数据结构>NO6.堆的实现|堆的应用

🐇本文用到的所有代码都放在我的gitee仓库了🐇syseptember的gitee仓库https://gitee.com/syseptember/data-structure/tree/4f0b1f9f56e3b0bee72fa0563c23a6917b3252e8/Heap/Heap 目录 堆的概念 堆的实现 堆的应用 堆排序 时间复杂度分析 TopK问题 …

做功能测试好几年,一直都像是给人“打杂”的!直到这天我开始……

“做功能测试这几年,一直都像是给人打杂的!”这句话,想必很多测试人员都有过同感。曾经,我们每天要重复执行繁琐的测试流程,手动输入大量数据、进行各种操作、检查每一个细节,整个过程反复无常,…