Hive 数仓迁移 JindoFS/OSS 数据湖最佳实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
对象存储 OSS,20GB 3个月
简介: Hive 数仓是大多数迁移客户都会遇到的场景。在迁移过程中,不建议同时在新集群进行业务升级(比如从 Hive on MR 迁移到 Hive on Tez 或 Spark SQL等),这些业务升级可以在迁移完成后进行。1. 元数据同步Hive 元数据是对于 Hive 表来说非常关键,除了表结构信息,里面还记录着 Hive 表与底层文件系统的关联关系,许多上层服务都依赖 Hive 元数据提供服务。a.

Hive 数仓是大多数迁移客户都会遇到的场景。在迁移过程中,不建议同时在新集群进行业务升级(比如从 Hive on MR 迁移到 Hive on Tez 或 Spark SQL等),这些业务升级可以在迁移完成后进行。

1. 元数据同步

Hive 元数据是对于 Hive 表来说非常关键,除了表结构信息,里面还记录着 Hive 表与底层文件系统的关联关系,许多上层服务都依赖 Hive 元数据提供服务。

a. 准备工作

在实际业务场景中,元数据经常会发生变化,为了避免迁移过程中元数据发生改变,建议先保证原有元数据的稳定性。这里可以通过 hive.metastore.pre.event.listeners 配置自己实现的 listener,在一段时间(比如每天9:00~15:00)内禁止修改元数据(建议在 listener 内通过外部服务实现灵活控制,不要求重启metastore),利用实现的同步脚本在这段时间内同步两侧元数据,同时保证原有环境元数据服务可读。

Hive 元数据服务依赖底层的 mysql/自建rds/统一rds 等服务。根据实际的规划选择使用的底层服务后,如果使用自建 rds 方案,需要确保 rds 用户的权限配置。

另外,在迁移 Hive 元数据时,还要考虑版本兼容性的问题。在本阶段,建议先收集原有元数据库的版本,在实际同步阶段使用。

b. 导出原有元数据

原有元数据导出,可以使用 mysqldump 工具进行。在老集群上执行如下命令:

mysqldump -t DATABASENAME -h HOST -P PORT -u USERNAME** -p PASSWORD** > /tmp/metastore.sql
AI 代码解读

命令中的一些参数,可以查看老集群 hive metastore 服务的 xml 配置文件,以javax.jdo.option.ConnectionUserName、javax.jdo.option.ConnectionPassword 和 javax.jdo.option.ConnectionURL 的实际值为准。

导出的 /tmp/metastore.sql 即为导出的元数据。

c. 修改导出数据

根据原集群配置,找到所有设计到底层路径的字段。如果原集群使用 HDFS,那么应该是 HDFS 的路径(注意除了hdfs:// 开头的路径,还有 / 开头的路径),如果原集群是 S3 则找到所有 S3 的路径。需要在 .sql 文件中全部替换为相应的 OSS 路径,另存为 metastore-oss.sql .

d. 同步到现有元数据库

这一步建议在数据同步后进行。

如果使用 RDS,首先修改新 EMR 集群 Master 节点上的 /usr/local/emr/emr-agent/run/meta_db_info.json,把里面的 use_local_meta_db 设置为false,meta 数据库的链接地址、用户名和密码换成RDS的信息。如果是 HA 集群,那么每个 master 都需要处理。这个步骤只需要做一次即可。

使用 mysqldump 命令,将 metastore-oss.sql 文件导入新集群的 mysql 或 RDS,命令如下:

mysql -u root -p database_name < metastore-oss.sql
AI 代码解读

如果 Hive 版本不一致,同步后,使用 hive 提供的脚本解决 metastore 版本问题。脚本位于 /usr/lib/hive-current/scripts/metastore/upgrade/mysql/ 下,依次执行脚本升级到 EMR 集群 hive 版本即可。

同步完成后建议重启新集群的 Hive metastore 和 hiveserver2(清除一些缓存的统计信息),然后在 hivecli 或 beeline 中验证元数据可用。这种同步方式无需再用 msck 命令修复分区。

对于每天的增量,可以构建上述 b、c、d步骤的脚本,每天全量同步原集群的元数据到新集群(mysqldump 的脚本中一般会删除原有 mysql 数据)。

2. 数据同步

数据同步指 Hive 数仓内数据文件的同步。这一块的同步参见文件系统的数据同步。在元数据同步与数据同步均完成后,可以在两套环境中通过 presto 查询对每张表执行 count(*) 保证数据数量一致。

如果元数据比较稳定,不会做与数据同步同周期的同步,对于一些按天/小时等进行分区的表,还需在数据同步后手动执行 msck 命令在 hive metastore 中修复分区。

3. 作业迁移

a. 搭建作业调度框架

根据老集群的使用习惯,可能需要自己搭建作业调度框架(例如airflow等),然后把老集群的作业全部复制到新集群,注意需要修改作业调度框架中定义的客户端/服务的地址。

自建作业调度框架建议部署在 EMR gateway 上。

b. 解决作业兼容性

这里的兼容性指运行报错方面的问题。有些运行报错是因为配置不同步(需要调整某些配置开关)引起的,所以在执行前,最好先保证两边 hive/spark 等引擎配置一致。然后我们启动作业调度框架,根据失败任务的日志分析兼容性问题。

一种兼容性问题是业务引起的,比如依赖的某个外部服务没有安装或配置不对。这种情况很容易通过报错信息发现。另一种兼容性问题来自引擎版本的区别。如果是从 Hive 1.x 迁移到 Hive 2.x 以上版本,由于 Hive 2.x 引入了 Calcite 作为默认的优化器,可能有较多不兼容场景(EMR团队已经修复了很多 Calcite 的 bug,但还是不能保证面面俱到),可以先设置 hive.cbo.enable = false 绕开,然后提交给 EMR 技术团队进行修复解决。

确保所有作业能正常运行后,进入对数阶段。

c. 对数

在完成作业迁移之后,还需要对作业的结果进行比对,确保和原环境一致。一般来说,如果数据同步完成后每张表的数据都已经一样,对数环节应该不会有太大偏差。主要的偏差来源于引擎不同版本的语法区别、自定义udf函数不稳定、作业本身结果不稳定。由于实际业务场景可能非常复杂,所需处理的作业数量很多,应当先理清业务之间的依赖关系,找到出问题的作业和原因,然后同步给相关业务方进行修改。

由于一些调度作业依赖历史数据,所以在对数阶段,需要保证每天运行前先做好数据同步工作。

要找到出问题的作业,首先要构建作业间的依赖关系。Airflow 的 DAG 信息中可以查看作业的依赖关系,也可以使用 Hive 的 post hook 和 Spark 的 QueryExecutionListener 机制,收集表之间的依赖关系。查询依赖关系后,可以从最终不一致的表出发,寻找到上游出问题的作业,根据作业分析问题所在。常见的原因有不稳定的UDF(依赖分区方式或外部服务等)、不一致的 SQL 语义(不同引擎版本)等。根据具体情况,由业务方进行修改,可以咨询 EMR 技术团队获取依赖关系收集和查询的帮助,以及作业修改意见。

对数全部通过,作业调度稳定运行一段时间(比如一周),迁移即完成,此时可以下线老集群。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
打赏
0
0
0
0
1100
分享
相关文章
基于云服务器的数仓搭建-hive/spark安装
本文介绍了在本地安装和配置MySQL、Hive及Spark的过程。主要内容包括: - **MySQL本地安装**:详细描述了内存占用情况及安装步骤,涉及安装脚本的编写与执行,以及连接MySQL的方法。 - **Hive安装**:涵盖了从上传压缩包到配置环境变量的全过程,并解释了如何将Hive元数据存储配置到MySQL中。 - **Hive与Spark集成**:说明了如何安装Spark并将其与Hive集成,确保Hive任务由Spark执行,同时解决了依赖冲突问题。 - **常见问题及解决方法**:列举了安装过程中可能遇到的问题及其解决方案,如内存配置不足、节点间通信问题等。
186 1
基于云服务器的数仓搭建-hive/spark安装
AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
本文将从三个维度展开论述:首先分析 Iceberg 的技术优势及其成为行业标准的原因,其次详细阐述数据入湖的最佳实践方法,最后重点介绍 AutoMQ 如何利用阿里云 OSS 高效解决 Kafka 数据入湖问题。通过 AutoMQ 和阿里云服务的结合,用户可以轻松实现 Kafka 数据入湖的最佳实践。
151 15
AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
在数据湖技术生态中,Apache Iceberg凭借其开放性设计已确立事实标准地位。该技术不仅获得全球企业广泛采用,还构建了包含Apache Spark、Amazon Athena、Presto等主流计算引擎的完整生态系统。
化整为零:湖仓数据平台一站式迁移
本文介绍了湖仓平台迁移的概况、痛点及解决方案。首先概述了数据湖和数据仓库迁移的现状与背景,强调其重要性及挑战。接着分析了迁移过程中的主要痛点,如数据量大、业务变更频繁等。最后提出了一种化整为零的新范式,通过精细化设计和自动化工具提升迁移效率,并展示了一站式湖仓迁移中心的关键阶段和产品大图,旨在加速迁移过程并减少人工成本。
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
99 2
|
7月前
|
hive数仓 ods层增量数据导入
根据业务需求,当表数据量超过10万条时采用增量数据导入,否则全量导入。增量导入基于`create_date`和`modify_date`字段进行,并确保时间字段已建立索引以提升查询效率。避免在索引字段上执行函数操作。创建增量表和全量表,并按日期进行分区。首次导入全量数据,后续每日新增或变更数据保存在增量表中,通过全量表与增量表的合并保持数据一致性。
226 12
OSS数据源一站式RAG最佳实践
本文介绍了如何使用OpenSearch LLM智能问答版通过OSS数据源一站式构建RAG系统。
7280 11
Greenplum闭源?平滑迁移到 AnalyticDB 开启Data+AI新范式
知名开源 MPP 数据库 Greenplum 由于其丰富的企业级特性和出色的数据处理能力成为很多企业构建数仓的首选。近期 GP 公开 Github 仓库无法访问仅保留只读归档代码,业界纷纷猜测 GP 即将闭源。云原生数仓 AnalyticDB PostgreSQL 版完全掌控内核代码,完全兼容GP语法,全自研计算及存储引擎较比开源GP有五倍性能提升,全自研企业级特性在实时计算、弹性扩展、安全增强、高可用等方面实现对GP的全面超越,并在数仓能力上扩展了向量检索及一站式 RAG 服务,帮助企业快速构建 AI 应用、开启 Data+AI 新范式。
59279 3
Hive 数仓及数仓设计方案
数仓整合企业数据,提供统一出口,用于数据治理。其特点包括面向主题集成和主要支持查询操作。数仓设计涉及需求分析(如咨询老板、运营人员和行业专家)、确定主题指标(如电商的转化率)、数据标准设定、规模与成本计算、技术选型(如Hadoop生态组件)以及数据采集和操作。设计流程涵盖从理解需求到实施SQL函数和存储过程的全过程。
256 3
实时数仓 Hologres产品使用合集之是否提供相应的功能接口和指令,可以将数据从OSS存储同步到Hologres中进行分析
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线