tencent cloud

弹性 MapReduce

动态与公告
产品动态
产品公告
安全公告
产品简介
产品概述
产品优势
产品架构
产品功能
应用场景
约束与限制
技术支持范围
产品发行版
购买指南
EMR on CVM 计费说明
EMR on TKE 计费说明
EMR Serverless HBase 计费说明
快速入门
EMR on CVM 快速入门
EMR on TKE 快速入门
EMR on CVM 操作指南
规划集群
管理权限
配置集群
管理集群
管理服务
监控告警
智能管家
EMR on TKE 操作指南
EMR on TKE 简介
配置集群
管理集群
管理服务
监控运维
应用分析
EMR Serverless HBase 操作指南
EMR Serverless HBase 产品简介
配额与限制
规划实例
管理实例
监控告警
开发指南
EMR 开发指南
Hadoop开发指南
Spark 开发指南
HBASE开发指南
Phoenix on Hbase 开发指南
Hive 开发指南
Presto开发指南
Sqoop 开发指南
Hue 开发指南
Oozie 开发指南
Flume 开发指南
Kerberos 开发指南
Knox 开发指南
Alluxio 开发指南
Kylin 开发指南
Livy 开发指南
Kyuubi 开发指南
Zeppelin 开发指南
Hudi 开发指南
Superset 开发指南
Impala 开发指南
Druid 开发指南
Tensorflow 开发指南
Kudu 开发指南
Ranger 开发指南
Kafka 开发指南
Iceberg 开发指南
StarRocks 开发指南
Flink 开发指南
JupyterLab 开发指南
MLflow 开发指南
实践教程
EMR on CVM 运维实践
数据迁移实践
自定义伸缩实践教程
API 文档
History
Introduction
API Category
Cluster Resource Management APIs
Cluster Services APIs
User Management APIs
Data Inquiry APIs
Scaling APIs
Configuration APIs
Other APIs
Serverless HBase APIs
YARN Resource Scheduling APIs
Making API Requests
Data Types
Error Codes
常见问题
EMR on CVM常见问题
服务等级协议
联系我们

Hive 数据迁移实践

PDF
聚焦模式
字号
最后更新时间: 2025-01-03 15:05:11
Hive 迁移涉及两部分,数据迁移和元数据迁移。Hive 表数据主要存储在 HDFS 上,故数据的迁移主要在 HDFS 层。Hive 的元数据主要存储在关系型数据库,可平滑迁移到云上 TencentDB,并可保障高可用。

Hive 元数据迁移

1. Dump 源 Hive 元数据库。
mysqldump -hX.X.X.X -uroot -pXXXX --single-transaction --set-gtid-purged=OFF hivemetastore > hivemetastore-src.sql
# 如果 mysql 数据没有开启 GTID,请删除命令行中的 --set-gtid-purged=OFF
# X.X.X.X为数据库服务器地址
# XXXX为数据库密码
# 如果数据库用户不是 root,请用正确的用户名
# hivemetastore 是 Hive 元数据库名
2. 确认目标集群 Hive 表数据在 HDFS 中的默认存储路径。 Hive 表数据在 HDFS 中的默认存储路径由 hive-site.xml 中的 hive.metastore.warehouse.dir 配置项指定。如果目标集群 Hive 表在 HDFS 的存储路径需要与源集群 Hive 表路径一致,可以参考以下示例对配置文件进行修改。例如,源集群 hive-site.xmlhive.metastore.warehouse.dir 为下面的值。
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/apps/hive/warehouse</value>
</property>
目标集群 hive-site.xmlhive.metastore.warehouse.dir 为下面的值。
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
如果目标集群 Hive 表在 HDFS 的存储位置依然保持与源集群 Hive 一致,那么修改目标 hive-site.xml 中的 hive.metastore.warehouse.dir,即为:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/apps/hive/warehouse</value>
</property>
3. 确认目标 Hive 元数据 SDS.LOCATION 和 DBS.DB_LOCATION_URI 字段。 通过下面的查询获取当前 SDS.LOCATION 和 DBS.DB_LOCATION_URI 字段。
SELECT DB_LOCATION_URI from DBS;
SELECT LOCATION from SDS;
查询出的结果类似如下:
mysql> SELECT LOCATION from SDS;
+--------------------------------------------------+
| LOCATION |
+--------------------------------------------------+
| hdfs://HDFS2648/usr/hive/warehouse/hitest.db/t1 |
| hdfs://HDFS2648/usr/hive/warehouse/wyp |
+--------------------------------------------------+
mysql> SELECT DB_LOCATION_URI from DBS;
+-----------------------------------------------+
| DB_LOCATION_URI |
+-----------------------------------------------+
| hdfs://HDFS2648/usr/hive/warehouse |
| hdfs://HDFS2648/usr/hive/warehouse/hitest.db |
+-----------------------------------------------+
其中 hdfs://HDFS2648 是 HDFS 默认文件系统名,由 core-site.xml 中的 fs.defaultFS 指定。
<property>
<name>fs.defaultFS</name>
<value>hdfs://HDFS2648</value>
</property>
/usr/hive/warehouse 为 Hive 表在 HDFS 中的默认存储路径,也是 hive-site.xmlhive.metastore.warehouse.dir 指定的值。所以我们需要修改源 hive 元数据 sql 文件中的 SDS.LOCATION 和 DBS.DB_LOCATION_URI 两个字段。确保被导入的 Hive 元数据库中的这两个字段使用的是正确的路径。可使用如下 sed 命令批量修改 sql 文件。
替换ip:sed -i 's/oldcluster-ip:4007/newcluster-ip:4007/g' hivemetastore-src.sql
替换defaultFS:sed -i 's/old-defaultFS/new-defaultFS/g' hivemetastore-src.sql
其中 oldcluster-ip、newcluster-ip 分别为源集群、目标集群 namenode 的 ip 地址,old-defaultFS、new-defaultFS 分别为源集群、目标集群的 fs.defaultFS 配置项的值。
说明
如果使用了 Kudu、Hbase 等部分组件,用 Metastore 作为元数据服务,也需更改目标 Hive 元数据中对应 location 字段。
4. 停止目标 Hive 服务 MetaStore、HiveServer2、WebHcataLog。
5. 备份目标 Hive 元数据库。
mysqldump -hX.X.X.X -uroot -pXXXX --single-transaction --set-gtid-purged=OFF hivemetastore > hivemetastore-target.sql
# 如果 mysql 数据没有开启 GTID,请删除命令行中的 --set-gtid-purged=OFF
# X.X.X.X为数据库服务器地址
# XXXX为数据库密码
# 如果数据库用户不是 root,请用正确的用户名
# hivemetastor 是 Hive 元数据库名
6. Drop/Create 目标 Hive 元数据。
mysql> drop database hivemetastore;
mysql> create database hivemetastore;
7. 导入源 Hive 元数据库到目标数据库。
mysql -hX.X.X.X -uroot -pXXXX hivemetastore < hivemetastore-src.sql
# X.X.X.X为数据库服务器地址
# XXXX为数据库密码
# 如果数据库用户不是 root,请用正确的用户名
# hivemetastor 是 Hive 元数据库名
8. Hive 元数据升级。 如果目标和源 Hive 版本一致,则可直接跳过该步骤;否则,分别在源集群和目标集群查询 Hive 版本。
hive --service version
hive 的升级脚本存放在 /usr/local/service/hive/scripts/metastore/upgrade/mysql/ 目录下。 hive 不支持跨版本升级,例如 hive 从1.2升级到2.3.0需要依次执行:
upgrade-1.2.0-to-2.0.0.mysql.sql -> upgrade-2.0.0-to-2.1.0.mysql.sql -> upgrade-2.1.0-to-2.2.0.mysql.sql -> upgrade-2.2.0-to-2.3.0.mysql.sql
升级脚本主要操作为建表、加字段、改内容。如果表或字段已经存在,则升级过程中字段已存在的异常可以忽略。例如 hive 从2.3.3升级至3.1.1。
mysql> source upgrade-2.3.0-to-3.0.0.mysql.sql;
mysql> source upgrade-3.0.0-to-3.1.0.mysql.sql;
9. 如果源 Hive 中有 phoenix 表,修改目标 Hive 元数据中 phoenix 表的 zookeeper 地址。 通过下面的查询获取 phoenix 表的 phoenix.zookeeper.quorum 配置。
mysql> SELECT PARAM_VALUE from TABLE_PARAMS where PARAM_KEY = 'phoenix.zookeeper.quorum';
+--------------------------------------------------+
| PARAM_VALUE |
+--------------------------------------------------+
| 172.17.64.57,172.17.64.78,172.17.64.54 |
+--------------------------------------------------+
查看目标集群的 zookeeper 地址,即 hive-site.xml 配置文件中 hbase.zookeeper.quorum 指定的值。
<property>
<name>hbase.zookeeper.quorum</name>
<value>172.17.64.98:2181,172.17.64.112:2181,172.17.64.223:2181</value>
</property>
将目标 Hive 元数据中的 phoenix 表的 zookeeper 地址改为目标集群的 zookeeper 地址。
mysql> UPDATE TABLE_PARAMS set PARAM_VALUE = '172.17.64.98,172.17.64.112,172.17.64.223' where PARAM_KEY = 'phoenix.zookeeper.quorum';
10. 检查目标 Hive 元数据中表名的大小写格式,参考以下示例将所有小写表名改为大写:
alter table metastore_db_properties rename to METASTORE_DB_PROPERTIES;
11. 启动目标 Hive 服务 MetaStore、HiveServer2、WebHcataLog。
12. 最后可通过简单的 Hive sql 查询进行验证。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈