【Hive实战】Hive MetaStore升级调研(Mysql)
Hive MetaStore升级调研(Mysql库)
文章目录
- Hive MetaStore升级调研(Mysql库)
- 升级步骤
- 脚本说明
- 原文
MetaStore升级的主要部分是对存储媒介mysql进行schema进行升级。
升级步骤
-
关闭MetaStore实例并限制对MetaStore MySQL数据库的访问。在执行schema升级时,不要让其他人访问或修改数据库的内容,这一点非常重要。【停止元数据服务,代表升级期间,关于hive的服务均不可用。】
-
创建MySQL metastore数据库的备份。如果出现问题,这将允许你恢复在升级过程中所做的任何更改。mysqldump工具是创建MySQL数据库备份最简单的方法:【备份Mysql(元数据服务库)数据】
> mysqldump --opt <metastore_db_name> > metastore_backup.sql
注意,你可能还需要使用–host和–user命令行开关指定主机名和用户名。
-
将metastore数据库schema转储到文件中。我们再次使用mysqldump工具程序,但这次使用命令行选项,指定我们只对转储创建schema所需的DDL语句:【备份Mysql(元数据服务库)的schema】
> mysqldump --skip-add-drop-table --no-data <metastore_db_name> > my-schema-x.y.z.mysql.sql
-
schema升级脚本假定你正在升级的schema与你的特定版本Hive的官方schema非常匹配。该目录下的文件名如
hive-schema-x.y.z.mysql.sql
包含Hive每个发布版本对应的官方schema的备份。你可以通过将官方转储的内容与上一步中创建的schema备份的内容进行区分,来确定你的schema与官方schema之间的差异。有些差异是可以接受的,不会干扰升级过程,但其他差异需要手动解决,否则升级脚本将无法完成。-
表缺少:Hive的默认配置导致MetaStore只在需要时创建schema元素。如果你没有创建相应的Hive目录对象,一些表可能会从MetaStore schema中丢失,例如,如果你没有在MetaStore中创建任何表分区,那么
PARTITIONS
表可能不存在。你必须在运行升级脚本之前创建这些缺失的表。最简单的方法是针对schema执行正式的schemaDDL脚本。schema脚本中的每个CREATE TABLE语句都包含一个IF NOT EXISTS子句,因此schema中已经存在的表将被忽略,而不存在的表将被创建。【升级脚本不会主动创建和补充未使用的元素,执行升级脚本之前,需要先执行对应版本的DDL脚本用来创建表,确保表不会缺失。】 -
额外的表:schema可能包括一个名为
NUCLEUS_TABLES
的表或一个名为SEQUENCE_TABLE
的表。这些表由DataNucleus ORM层管理,如果它们不存在,将自动创建。你不需要采取任何行动。【可以忽略,若执行建表sql,则必然包含上述两张表】 -
同一表中相反的列约束名称:具有多个约束的表可能具有反向的约束名称。例如,
PARTITIONS
表包含两个外键约束,分别名为PARTITIONS_FK1
和PARTITIONS_FK2
,它们分别引用SDS.SD_ID
和TBLS.TBL_ID
。但是,在你的schema中,你可能会发现PARTITIONS_FK1
引用TBLS.TBL_ID
和PARTITIONS_FK2
引用SDS.SD_ID
。任何一个版本都是可以接受的——唯一的要求是这些约束确实存在。【列约束名称的引用可以不同,但是需要约束要完整】 -
列/约束名称的差异:你的schema可能包含列名为
IDX
或唯一键名为unique <tab_name>
的表。如果在schema中发现了这两种情况,则需要在运行升级脚本之前将其名称更改为INTEGER_IDX
和UNIQUE_<tab_name>
。有关此问题的更多背景信息,请参阅hive-1435。【UNIQUE_
开头有点疑问了,官方的ddl里面就存在非UNIQUE_
开头的唯一键】
-
-
现在可以运行schema升级脚本了。【如果你要从Hive 0.5.0升级到Hive 0.6.0,你需要运行
upgrade-0.5.0-to-0.6.0.mysql.SQL
脚本,但是如果要从0.5.0升级到0.7.0,则需要先运行0.5.0到0.6.0升级脚本,然后再运行0.6.0到0.7.0升级脚本。】【不支持跨大版本升级,需要按顺序执行升级脚本】
> mysql --verbose mysql> use <metastore_db_name>; Database changed mysql> source upgrade-1.2.0-to-2.0.0.mysql.sql mysql> source upgrade-2.0.0-to-2.1.0.mysql.sql mysql> source upgrade-2.1.0-to-2.2.0.mysql.sql mysql> source upgrade-2.2.0-to-2.3.0.mysql.sql
这些脚本应该运行到没有任何错误。如果确实遇到错误,则需要分析原因,并尝试将其追溯到前面的步骤之一。
-
升级过程的最后一步是根据Hive特定版本的官方schema验证新升级的schema。这是通过**重复步骤(3)和(4)**来完成的,但这次是与升级后的schema的正式版本进行比较,例如,如果你将schema升级到Hive 0.7.0,那么你将需要将你的schema备份与
hive-schema-0.7.0.mysql.sql
的内容进行比较。【将1.2.0升级到2.0.0之后。备份schema,将升级到2.0.0的schema与官方直接的schema2.0.0进行比对,若无问题,再将2.0.0升级到2.1.0,再与官方直接的schema2.1.0比对,再将2.1.0升级到2.2.0,一步步升级到2.3.0。】
脚本说明
脚本来源:hive 2.3.4源码metastore/scripts/upgrade/mysql/
下
官方直接schema DDL脚本有两类hive-schema-a.b.c.mysql.sql
和hive-txn-schema-a.b.c.mysql.sql
,例如hive-schema-2.3.0.mysql.sql
和hive-txn-schema-2.3.0.mysql.sql
。
upgrade脚本主要是去执行XXX-HIVE-XXXXX.mysql.sql
类的脚本,去逐个分析每个脚本里里面的操作。如下:
SELECT 'Upgrading MetaStore schema from 1.2.0 to 2.0.0' AS ' ';
SOURCE 021-HIVE-7018.mysql.sql;
SOURCE 022-HIVE-11970.mysql.sql;
SOURCE 023-HIVE-12807.mysql.sql;
SOURCE 024-HIVE-12814.mysql.sql;
SOURCE 025-HIVE-12816.mysql.sql;
SOURCE 026-HIVE-12818.mysql.sql;
SOURCE 027-HIVE-12819.mysql.sql;
SOURCE 028-HIVE-12821.mysql.sql;
SOURCE 029-HIVE-12822.mysql.sql;
SOURCE 030-HIVE-12823.mysql.sql;
SOURCE 031-HIVE-12831.mysql.sql;
SOURCE 032-HIVE-12832.mysql.sql;UPDATE VERSION SET SCHEMA_VERSION='2.0.0', VERSION_COMMENT='Hive release version 2.0.0' where VER_ID=1;
SELECT 'Finished upgrading MetaStore schema from 1.2.0 to 2.0.0' AS ' ';
若在执行升级脚本时出现错误:
-
方式一:还原schema后修复问题后,重新执行升级脚本。
-
方式二:根据升级脚本的语句,手动修复达到官方直接脚本的效果。
原文
文章来源:hive 2.3.4源码metastore/scripts/upgrade/mysql/README
This document describes how to upgrade the schema of a MySQL backed Hive MetaStore instance from one release version of Hive to another release version of Hive. For example, by following the steps listed below it is possible to upgrade a Hive 0.5.0 MetaStore schema to a Hive 0.7.0 MetaStore schema. Before attempting this project we strongly recommend that you read through all of the steps in this document and familiarize yourself with the required tools.
MetaStore Upgrade Steps
-
Shutdown your MetaStore instance and restrict access to the MetaStore’s MySQL database. It is very important that no one else accesses or modifies the contents of database while you are performing the schema upgrade.
-
Create a backup of your MySQL metastore database. This will allow you to revert any changes made during the upgrade process if something goes wrong. The mysqldump utility is the easiest way to create a backup of a MySQL database:
% mysqldump --opt <metastore_db_name> > metastore_backup.sql
Note that you may need also need to specify a hostname and username using the --host and --user command line switches.
-
Dump your metastore database schema to a file. We use the mysqldump utility again, but this time with a command line option that specifies we are only interested in dumping the DDL statements required to create the schema:
% mysqldump --skip-add-drop-table --no-data <metastore_db_name> > my-schema-x.y.z.mysql.sql
-
The schema upgrade scripts assume that the schema you are upgrading closely matches the official schema for your particular version of Hive. The files in this directory with names like “hive-schema-x.y.z.mysql.sql” contain dumps of the official schemas corresponding to each of the released versions of Hive. You can determine differences between your schema and the official schema by diffing the contents of the official dump with the schema dump you created in the previous step. Some differences are acceptable and will not interfere with the upgrade process, but others need to be resolved manually or the upgrade scripts will fail to complete.
- Missing Tables: Hive’s default configuration causes the MetaStore to create schema elements only when they are needed. Some tables may be missing from your MetaStore schema if you have not created the corresponding Hive catalog objects, e.g. the PARTITIONS table will probably not exist if you have not created any table partitions in your MetaStore. You MUST create these missing tables before running the upgrade scripts. The easiest way to do this is by executing the official schema DDL script against your schema. Each of the CREATE TABLE statements in the schema script include an IF NOT EXISTS clause, so tables which already exist in your schema will be ignored, and those which don’t exist will get created.
- Extra Tables: Your schema may include a table named NUCLEUS_TABLES or a table named SEQUENCE_TABLE. These tables are managed by the DataNucleus ORM layer and will be created automatically if they don’t exist. No action on your part is required.
- Reversed Column Constraint Names in the Same Table: Tables with multiple constraints may have the names of the constraints reversed. For example, the PARTITIONS table contains two foreign key constraints named PARTITIONS_FK1 and PARTITIONS_FK2 which reference SDS.SD_ID and TBLS.TBL_ID respectively. However, in your schema you may find that PARTITIONS_FK1 references TBLS.TBL_ID and PARTITIONS_FK2 references SDS.SD_ID. Either version is acceptable – the only requirement is that these constraints actually exist.
- Differences in Column/Constraint Names: Your schema may contain tables with columns named “IDX” or unique keys named “UNIQUE<tab_name>”. If you find either of these in your schema you will need to change the names to “INTEGER_IDX” and “UNIQUE_<tab_name>” before running the upgrade scripts. For more background on this issue please refer to HIVE-1435.
-
You are now ready to run the schema upgrade scripts. If you are upgrading from Hive 0.5.0 to Hive 0.6.0 you need to run the upgrade-0.5.0-to-0.6.0.mysql.sql script, but if you are upgrading from 0.5.0 to 0.7.0 you will need to run the 0.5.0 to 0.6.0 upgrade script followed by the 0.6.0 to 0.7.0 upgrade script.
% mysql --verbose mysql> use <metastore_db_name>; Database changed mysql> source upgrade-0.5.0-to-0.6.0.mysql.sql mysql> source upgrade-0.6.0-to-0.7.0.mysql.sql
These scripts should run to completion without any errors. If you do encounter errors you need to analyze the cause and attempt to trace it back to one of the preceding steps.
-
The final step of the upgrade process is validating your freshly upgraded schema against the official schema for your particular version of Hive. This is accomplished by repeating steps (3) and (4), but this time comparing against the official version of the upgraded schema, e.g. if you upgraded the schema to Hive 0.7.0 then you will want to compare your schema dump against the contents of hive-schema-0.7.0.mysql.sql
相关文章:
【Hive实战】Hive MetaStore升级调研(Mysql)
Hive MetaStore升级调研(Mysql库) 文章目录 Hive MetaStore升级调研(Mysql库)升级步骤脚本说明原文 MetaStore升级的主要部分是对存储媒介mysql进行schema进行升级。 升级步骤 关闭MetaStore实例并限制对MetaStore MySQL数据库的访…...
优化漏洞扫描流程以保障企业数字化业务安全
漏洞扫描技术历经二十余年发展,已从人工搜索演进至开源及商业扫描平台,其应用紧随IT环境与数字业务变迁而不断革新。为有效提升漏洞检测效果,确保企业数字化业务安全运行,安全专家建议遵循以下关键步骤实施漏洞扫描: …...

【大数据算法】一文掌握大数据算法之:大数据算法分析技术。
大数据算法分析技术 1、引言2、 大数据分析技术2.1 时间/空间复杂度2.2 I/O 复杂度2.3 结果质量2.4 通信复杂度 3、总结 1、引言 小屌丝:鱼哥,最近更文有些不频繁了哈。 小鱼:这一个月不见,你这说话方式也变了。 小屌丝ÿ…...

使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型
Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日,作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展,帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…...

基于yolov10的驾驶员抽烟打电话安全带检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOv10的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统。该系统利用YOLOv10算法的高效性和准确性,实现对驾驶员行为的实时检测与识别。 YOLOv10是一种最新的实时物体检测模型,其通过深度学习技术,如卷…...

虚拟机网络设置为桥接模式
1、打开VMware Workstation Pro,点击“虚拟机—设置”,进入虚拟机设置页面 2、点击“网络适配器”,网络连接选择桥接模式 3、点击“编辑—虚拟网络编辑器”,进入虚拟网络编辑器页面 4、选择桥接模式,并选择要桥接到的…...

Numpy基础02
目录 1.数组操作 1.1改变维度 1.2遍历数组 1.2.1nditer(array,order) 1.2.1.1flags 参数 1.2.1.2op_flags 参数 1.3平展数组 1.3.1flatten(orderC) 1.3.2ravel() 1.4数组转置 1.4.1transpose() 1.4.2T 1.5分割数组 1.5.1hsplit(arr,indices_or_section) 1.5.2vsp…...

Elasticsearch是做什么的?
初识elasticsearch 官方网站:Elasticsearch:官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的? Elasticsearch 是一个分布式搜索和分析引擎,专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …...
Java中消息队列
MQ是Message Queue的缩写,也就是消息队列的意思,它是一种应用程序对应用程序的通信方法,使得应用程序能够通过读写出入列队的消息来进行通信,而无需要使用专用的连接来链接它们。消息队列中间件是分布式系统中重要的组件ÿ…...

高频面试手撕
手撕高频结构 前言 以下内容,都是博主在秋招面试中,遇到的面试手撕代码题目,不同于算法题目,更多考察的是基础知识,包含常见的数据结构比如线性表、哈希表、优先级队列等,还有多线程以及数据库连接池等内…...

Spring Boot 3.3 【八】整合实现高可用 Redis 集群
一、引言 在当今快速发展的软件开发领域,系统的性能和可靠性至关重要。Springboot 3 整合 Redis 7 集群具有多方面的重大意义。 首先,随着业务的不断发展,数据量呈爆炸式增长,单个 Redis 服务器往往难以满足存储和处理需求。Red…...
循环控制结构穷举 同构数
说明 同构数是会出现在它的平方的右边的数。例如,5就是1个同构数。5的平方是25,25最右边的这个数是5自己。25也是一个同构数,比如25的平方是625,而625右边的数是25. 请编程输出1000以内正整数中所有的同构数。每行一个答案。 输…...
主机本地IP与公网IP以及虚拟机的适配器和WSL发行版的IP
在局域网内,如果你想要连接到同一网络中的另一台设备,建议使用 本地 IP 地址(也称为局域网 IP 地址)。这是因为本地 IP 地址是在局域网内分配给设备的,用于在同一网络中的设备之间进行通信。 使用本地 IP 地址的好处 …...
@MassageMapping和@SendTo注解详解
MessageMapping注解是Spring Framework中用于WebSocket消息处理的注解,它用于将特定的消息路径映射到处理器方法上。SendTo注解指定了相应消息应该被发送到的目的地路径。 一、WebSocket配置类: Configuration EnableWebSocketMessageBroker public cl…...

2.1_Linux发展与基础
Linux基础知识 Shell 命令执行环境: 命令提示符的组成:(用户名主机名)-[当前路径]权限提示符,例:(kali㉿kali)-[~]$ ~ 表示所在目录为家目录:其中root用户的家目录是/root,普通用户的家目录在/home下 # 表示用户的权…...

c#子控件拖动父控件方法及父控件限在窗体内拖动
一、效果 拖放位置不超过窗体四边,超出后自动靠边停靠支持多子控件拖动指定控件拖放(含父控件或窗体)点击左上角logo弹出消息窗口(默认位置右下角)1.1 效果展示 1.2 关于MQTTnet(最新版v4.3.7.1207)实现在线客服功能,见下篇博文 https://github.com/dotnet/MQTTnet 网上…...

Redis --- 第八讲 --- 关于主从复制哨兵
主从复制的补充问题 从节点和主节点之间断开连接,有两种情况: 1、从节点和主节点断开连接 slaveof no one 命令。这个时候,从节点就能能够晋升成主节点。意味着我们程序员要主动修改redis的组成结构。, 2、主节点挂了 这个时…...

【数据结构】时间和空间复杂度-Java
如何衡量算法的好坏 根据时间复杂度和空间复杂度来判断 比较项目时间复杂度空间复杂度定义衡量算法执行时间与问题规模之间的关系衡量算法在运行过程中所占用的额外存储空间与问题规模之间的关系表达方式通常用大O符号表示,如O(n)、O(n^2&am…...

tensorRT安装详解(linux与windows)
目录 tensorRT介绍 前置准备 安装cuda与cudnn linux windows cuda版本查看 下载安装包 linux安装 安装 安装验证 windows安装 安装 环境变量配置 安装验证 tensorRT介绍 有关tensorRT的介绍见 TensorRT简介-CSDN博客 前置准备 安装cuda与cudnn linux Linux下…...
MYSQL OPTIMIZE TABLE 命令重建表和索引
在 MySQL 中,OPTIMIZE TABLE 命令用于重建表和相关索引,以及回收未使用的空间。这个命令对于维护和优化数据库表的性能非常有用,特别是在进行了大量的数据删除操作之后。OPTIMIZE TABLE 可以减少数据文件的碎片化,确保数据存储更加…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...