Hive迁移

MapReduce BMR

  • 发行版本
  • 功能发布记录
  • 产品描述
    • 节点类型说明
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
  • Python-SDK
    • Cluster(集群)
    • BmrClient
    • 异常处理
    • InstanceGroup(实例组)
    • 简介
    • 文档更新记录
    • Step(作业)
    • 版本变更记录
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
  • 开源组件介绍
    • Impala
    • Pig
    • Druid
    • Presto
    • Hue
    • Ooize
    • HBase
    • Kudu
    • Sqoop
    • Hadoop-Streaming
    • Zeppelin
    • Alluxio
    • Kerberos
      • 集群互信配置
      • 概述
    • ClickHouse
      • 常见问题
      • 数据迁移同步
        • 从Spark导入
        • 从Kafka同步数据
        • 将自建ClickHouse数据迁移到云ClickHouse中
        • 从Flink导入
        • 从MySQL导入和同步
        • 从本地数据导入
          • Parquet格式
          • JSON
          • SQL转储
          • CSV and TSV
      • 快速入门
        • 访问模式
        • 客户端登录
        • 创建ClickHouse集群
        • 基础操作
      • 运维相关操作
        • ClickHouse集群扩容
        • ClickHouse集群缩容
        • 日志配置说明
        • 监控告警配置
    • Ranger
      • ranger概述
      • 权限策略配置
    • Paimon
      • Hive示例
      • StarRocks示例
      • 联合查询示例
      • Flink示例
      • Spark示例
    • Flink
      • 基础使用
    • Trino
      • 基础使用
      • 概述
    • Spark
      • 引擎增强
      • 基础使用
    • Hive
      • 开发指南
        • 自定义函数(UDF)
      • 实践操作
        • Hive迁移
        • Hive操作HBase外表
      • 基础使用
        • Hive基础操作
        • Hive连接方式
  • Java-SDK
    • Cluster(集群)
    • 异常
    • BmrClient
    • InstanceGroup(实例组)
    • 日志
    • 文档更新记录
    • 版本更新记录
    • Step(作业)
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
    • 概述
  • 快速入门
    • 操作流程概览
    • 环境准备
    • 创建集群
    • 数据准备
    • 开发作业
    • 查看结果
    • ClickHouse
      • 导入数据
      • 创建数据库
      • 连接集群
      • 创建表
  • 操作指南
    • 集群模板
    • 服务管理
    • 集群配置
      • 用户管理
      • 弹性伸缩
      • 创建集群
      • 集群安全模式
      • EIP
      • Hive元数据说明
      • 集群审计
      • 配置已有集群
      • 安全组
    • 管理作业
      • 创建作业
      • 诊断、调优
      • 定时任务
      • 查看作业
    • 访问集群
      • 访问集群服务页面
      • 访问集群-openVPN访问集群
      • 使用OpenVPN提交Hadoop作业
      • SSH连接到集群
    • 实践操作
      • 存储数据至HBase
      • 导入数据
      • 编译Maven项目
      • Sqoop导入导出数据
        • 导出数据
    • 权限管理
      • 多用户访问控制
      • 用户管理
    • 集群管理
      • 节点管理
      • 监控报警
      • 集群指标
      • 资源管理
  • 服务等级协议SLA
    • BMR服务等级协议SLA
  • API参考
    • 通用说明
    • 公共头
    • 数据类型
    • 版本更新记录
    • 服务域名
    • 实例操作接口
    • 实例组操作接口
    • 集群操作接口
    • API简介
    • 错误码
  • 常见问题
    • 安全性问题
    • 计费类问题
    • 常见问题总览
    • 性能类问题
    • 配置类问题
    • 故障类问题
  • 视频专区
    • 操作指南
    • 产品介绍
  • 场景教程
    • 流式应用场景
    • 离线应用场景
    • 使用Hive分析网站日志
    • Sqoop应用文档
    • 定时分析日志数据
    • HIVE
      • 不同集群的 Hive 迁移方案
      • Hive 操作 Hbase 外部表
  • 产品定价
    • 转换计费方式
    • 计费项
    • 到期或欠费说明
    • 包年包月计费
    • 续费说明
    • 变更配置计费说明
    • 计费方式
    • 按需计费
    • 账单和用量查询
    • 退款说明
所有文档
menu
没有找到结果,请重新输入

MapReduce BMR

  • 发行版本
  • 功能发布记录
  • 产品描述
    • 节点类型说明
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
  • Python-SDK
    • Cluster(集群)
    • BmrClient
    • 异常处理
    • InstanceGroup(实例组)
    • 简介
    • 文档更新记录
    • Step(作业)
    • 版本变更记录
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
  • 开源组件介绍
    • Impala
    • Pig
    • Druid
    • Presto
    • Hue
    • Ooize
    • HBase
    • Kudu
    • Sqoop
    • Hadoop-Streaming
    • Zeppelin
    • Alluxio
    • Kerberos
      • 集群互信配置
      • 概述
    • ClickHouse
      • 常见问题
      • 数据迁移同步
        • 从Spark导入
        • 从Kafka同步数据
        • 将自建ClickHouse数据迁移到云ClickHouse中
        • 从Flink导入
        • 从MySQL导入和同步
        • 从本地数据导入
          • Parquet格式
          • JSON
          • SQL转储
          • CSV and TSV
      • 快速入门
        • 访问模式
        • 客户端登录
        • 创建ClickHouse集群
        • 基础操作
      • 运维相关操作
        • ClickHouse集群扩容
        • ClickHouse集群缩容
        • 日志配置说明
        • 监控告警配置
    • Ranger
      • ranger概述
      • 权限策略配置
    • Paimon
      • Hive示例
      • StarRocks示例
      • 联合查询示例
      • Flink示例
      • Spark示例
    • Flink
      • 基础使用
    • Trino
      • 基础使用
      • 概述
    • Spark
      • 引擎增强
      • 基础使用
    • Hive
      • 开发指南
        • 自定义函数(UDF)
      • 实践操作
        • Hive迁移
        • Hive操作HBase外表
      • 基础使用
        • Hive基础操作
        • Hive连接方式
  • Java-SDK
    • Cluster(集群)
    • 异常
    • BmrClient
    • InstanceGroup(实例组)
    • 日志
    • 文档更新记录
    • 版本更新记录
    • Step(作业)
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
    • 概述
  • 快速入门
    • 操作流程概览
    • 环境准备
    • 创建集群
    • 数据准备
    • 开发作业
    • 查看结果
    • ClickHouse
      • 导入数据
      • 创建数据库
      • 连接集群
      • 创建表
  • 操作指南
    • 集群模板
    • 服务管理
    • 集群配置
      • 用户管理
      • 弹性伸缩
      • 创建集群
      • 集群安全模式
      • EIP
      • Hive元数据说明
      • 集群审计
      • 配置已有集群
      • 安全组
    • 管理作业
      • 创建作业
      • 诊断、调优
      • 定时任务
      • 查看作业
    • 访问集群
      • 访问集群服务页面
      • 访问集群-openVPN访问集群
      • 使用OpenVPN提交Hadoop作业
      • SSH连接到集群
    • 实践操作
      • 存储数据至HBase
      • 导入数据
      • 编译Maven项目
      • Sqoop导入导出数据
        • 导出数据
    • 权限管理
      • 多用户访问控制
      • 用户管理
    • 集群管理
      • 节点管理
      • 监控报警
      • 集群指标
      • 资源管理
  • 服务等级协议SLA
    • BMR服务等级协议SLA
  • API参考
    • 通用说明
    • 公共头
    • 数据类型
    • 版本更新记录
    • 服务域名
    • 实例操作接口
    • 实例组操作接口
    • 集群操作接口
    • API简介
    • 错误码
  • 常见问题
    • 安全性问题
    • 计费类问题
    • 常见问题总览
    • 性能类问题
    • 配置类问题
    • 故障类问题
  • 视频专区
    • 操作指南
    • 产品介绍
  • 场景教程
    • 流式应用场景
    • 离线应用场景
    • 使用Hive分析网站日志
    • Sqoop应用文档
    • 定时分析日志数据
    • HIVE
      • 不同集群的 Hive 迁移方案
      • Hive 操作 Hbase 外部表
  • 产品定价
    • 转换计费方式
    • 计费项
    • 到期或欠费说明
    • 包年包月计费
    • 续费说明
    • 变更配置计费说明
    • 计费方式
    • 按需计费
    • 账单和用量查询
    • 退款说明
  • 文档中心
  • arrow
  • MapReduceBMR
  • arrow
  • 开源组件介绍
  • arrow
  • Hive
  • arrow
  • 实践操作
  • arrow
  • Hive迁移
本页目录
  • 操作步骤
  • 迁移示例

Hive迁移

更新时间:2025-08-21

操作步骤

本文档描述如何把 Hive 数据库从一个 Hadoop 集群迁移到另一个 Hadoop 集群。

本文档假定新集群的 Hive 元数据库的内容可以清空。

  1. 停止老集群 Hive 集群 的 hive-metastore 和 hive-server2

停止方法:使用命令systemctl stop hive-metastore或者通过 ambari 操作。

Plain Text
1systemctl stop hive-metastore
2systemctl stop hive-server2

停止 hive metastore 后,集群所有的访问 hive 的任务都会报错。

  1. 新集群 Hive 停止所有的 hive-metastore 和 hive-server2
Plain Text
1systemctl stop hive-metastore
2systemctl stop hive-server2
  1. 备份 MySQL 数据库
Plain Text
1mysqldump -h ${MYSQL_HOST} -uhive '-p${MYSQL_PASSWD}' hive > hive-metastore.bak
  1. 恢复 MySQL数据库到新的地址

登录新的数据库:

Plain Text
1mysql -h ${NEW_MYSQL_HOST} -uhive '-p${MYSQL_PASSWD}' hive

如果目标数据库已经存在则先删除:

Plain Text
1drop database hive;

创建目标数据库:

Plain Text
1create database hive;

导入数据到新的数据库。

Plain Text
1mysql -h ${NEW_MYSQL_HOST} -uhive '-p${MYSQL_PASSWD}' hive < hive-metastore.bak

${NEW_MYSQL_HOST} 是数据库新的地址。

  1. 新 Hive 集群修改 MetaStore 服务器所在的 hive-site.xml

按需要修改以下配置,如果 MYSQL 数据库信息没有改变,则不需要修改。

Plain Text
1    <property>
2      <name>javax.jdo.option.ConnectionDriverName</name>
3      <value>com.mysql.jdbc.Driver</value>
4    </property>
5
6    <property>
7      <name>javax.jdo.option.ConnectionPassword</name>
8      <value>${MYSQL_PASSWD}</value>
9    </property>
10
11    <property>
12      <name>javax.jdo.option.ConnectionURL</name>
13      <value>jdbc:mysql://${NEW_MYSQL_HOST}/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
14    </property>
15    <property>
16      <name>javax.jdo.option.ConnectionUserName</name>
17      <value>hive</value>
18    </property>
  1. 升级 MetaStore 到新集群的版本(选做

如果新集群的 Hive 版本比老集群的 Hive 版本新,执行此步骤。如果一致,则跳过此步骤。新集群的 Hive 版本不得小于老集群的 Hive 版本。 在新集群 metastore 所在服务器,使用 hive 用户下执行以下操作, ${NEW_MYSQL_HOST}是新 mysql 数据库所在的服务器 IP 地址。 如下是把 hive 从 1.2 升级到 3.1。

Plain Text
1cd /opt/bmr/hive/scripts/metastore/upgrade/mysql
2mysql -uhive '-p${MYSQL_PASSWD}' -h ${NEW_MYSQL_HOST} hive

进入 MySQL 之后,执行以下 SQL 命令。

Plain Text
1source upgrade-1.2.0-to-2.0.0.mysql.sql;
2source upgrade-2.0.0-to-2.1.0.mysql.sql;
3source upgrade-2.1.0-to-2.2.0.mysql.sql;
4source upgrade-2.2.0-to-2.3.0.mysql.sql;
5source upgrade-2.3.0-to-3.0.0.mysql.sql;
6source upgrade-3.0.0-to-3.1.0.mysql.sql;
  1. 复制老集群的数据到新集群

复制老集群管理表数据到新集群

此步骤要求所有管理表都在老集群参数hive.metastore.warehouse.dir设置的目录下。

Plain Text
1<property>
2  <name>hive.metastore.warehouse.dir</name>
3  <value>/warehouse/tablespace/managed/hive</value>
4</property>

执行命令:

Plain Text
1hadoop fs -rm -r hdfs://${new-cluster}/${hive.metastore.warehouse.dir}
2hadoop distcp hdfs://${old-cluster}/${hive.metastore.warehouse.dir} hdfs://${new-cluster}/${hive.metastore.warehouse.dir 

注意:目标路径 hdfs://${new-cluster}/${hive.metastore.warehouse.dir} 必须不存在,否则会拷贝到它的子目录。

一般在新集群中执行 distcp 命令。如果在新集群执行 distcp 命令,需要在新集群设置老集群的配置, 并且所有新集群的服务器需要识别老集群的服务器,反之亦然。

如果不能用 hdfs 协议访问老集群,可以使用 hftp 或者 webhdfs 协议。

复制老集群外部表数据到新集群

此步骤要求所有管理表都在老集群参数hive.metastore.warehouse.external.dir设置的目录下,或者统一的目录。

Plain Text
1<property>
2  <name>hive.metastore.warehouse.external.dir</name>
3  <value>/warehouse/tablespace/external/hive</value>
4</property>

执行命令:

Plain Text
1hadoop fs -rm -r hdfs://${new-cluster}/${hive.metastore.warehouse.external.dir}
2hadoop distcp hdfs://${old-cluster}/${hive.metastore.warehouse.external.dir} hdfs://${new-cluster}/${hive.metastore.warehouse.external.dir} 

一般在新集群中执行 distcp 命令。如果在新集群执行 distcp 命令,需要在新集群设置老集群的配置, 并且所有新集群的服务器需要识别老集群的服务器,反之亦然。

如果不能用 hdfs 协议访问老集群,可以使用 hftp 或者 webhdfs 协议。

  1. 修改元数据库数据的位置

mysql -h 172.18.0.148 -uhive '-pxxx' hive

Plain Text
1-- managed db location
2update DBS SET DB_LOCATION_URI=replace(DB_LOCATION_URI, 'hdfs://${old-cluster}/${hive.metastore.warehouse.dir}','hdfs://${new-cluster}/${hive.metastore.warehouse.dir}');
3-- external db location
4update DBS SET DB_LOCATION_URI=replace(DB_LOCATION_URI, 'hdfs://${old-cluster}/${hive.metastore.warehouse.external.dir}', 'hdfs://${new-cluster}/${hive.metastore.warehouse.external.dir}' );
5-- managed table and partition location
6UPDATE SDS SET LOCATION = REPLACE(LOCATION, 'hdfs://${old-cluster}/${hive.metastore.warehouse.dir}','hdfs://${new-cluster}/${hive.metastore.warehouse.dir}');
7-- external table partition location
8update SDS SET LOCATION=replace(LOCATION, 'hdfs://${old-cluster}/${hive.metastore.warehouse.external.dir}', 'hdfs://${new-cluster}/${hive.metastore.warehouse.external.dir}');
  1. 重启新集群的 metastore 和 hiveserver

进入新集群的 metastore 和 hiveserver 对应的服务器,以 root 身份执行以下命令:

Plain Text
1systemctl start hive-metastore;
2systemctl start hive-server2;
  1. 进行测试

查询老集群的表,看数据是否正确。

迁移示例

老集群 hdfs 地址为:hdfs://master-9331fa9:8020,hive 版本为 hive 1.2.0,mysql 元数据库地址为 master-9331fa9 新集群 hdfs 地址为:hdfs://master-b882990:8020,hive 版本为 hive 3.1.0,mysql 元数据库地址为 master-b882990(IP:172.18.0.148)

在老集群创建相应的库和表:

Plain Text
1create database managed;
2use managed;
3create table t(c1 string) stored as textfile;
4load data local inpath '/etc/profile' overwrite into table t;
5create table tp(c1 string) partitioned by (pt string)stored as textfile;
6load data local inpath '/etc/profile' overwrite into table tp partition(pt='profile');
7
8create database e_db location '/warehouse/tablespace/external/hive/e_db.db';
9use e_db;
10create table e(c1 string) stored as textfile;
11load data local inpath '/etc/hosts' overwrite into table e;
12create table ep(c1 string) partitioned by (pt string)stored as textfile;
13load data local inpath '/etc/hosts' overwrite into table ep partition(pt='hosts');
  1. 停止老集群 hive 集群 的 hive-metastore 和 hive-server2

在老集群的 master-9331fa9 的 root 账号执行以下命令:

Plain Text
1systemctl stop hive-metastore
2systemctl stop hive-server2
  1. 新集群 hive 停止所有的 hive-metastore 和 hive-server2

在老集群的 master-b882990 的 root 账号执行以下命令:

Plain Text
1systemctl stop hive-metastore
2systemctl stop hive-server2
  1. 备份 mysql 数据库
Plain Text
1mysqldump -h master-9331fa9 -uhive '-pxxx' hive > hive-metastore.bak
  1. 恢复 mysql数据库到新的地址

登录新的数据库:

Plain Text
1mysql -h 172.18.0.148 -uhive '-pxxx' hive

目标数据库已经存在,先删除:

Plain Text
1drop database hive;

创建目标数据库

Plain Text
1create database hive;

恢复 MYSQL:

Plain Text
1mysql -h 172.18.0.148 -uhive '-pxxx' hive < hive-metastore.bak
  1. 新集群修改 metastore 服务器所在的 hive-site.xml

新集群连接 MYSQL 数据库的地址没有改变,跳过此步。

  1. 升级 metastore 到 新集群的版本

如下是把 hive 从 1.2 升级到 3.1。

Plain Text
1cd /opt/bmr/hive/scripts/metastore/upgrade/mysql
2mysql -h 172.18.0.148 -uhive '-pxxx' hive

进入 MYSQL 之后,执行以下 SQL 命令:

Plain Text
1source upgrade-1.2.0-to-2.0.0.mysql.sql;
2source upgrade-2.0.0-to-2.1.0.mysql.sql;
3source upgrade-2.1.0-to-2.2.0.mysql.sql;
4source upgrade-2.2.0-to-2.3.0.mysql.sql;
5source upgrade-2.3.0-to-3.0.0.mysql.sql;
6source upgrade-3.0.0-to-3.1.0.mysql.sql;
7quit;
  1. 复制老集群的数据到新集群

复制老集群管理表数据到新集群

以 hive 账号执行以下命令:

Plain Text
1hadoop fs -rm -r hdfs://master-b882990/warehouse/tablespace/managed/hive
2hadoop distcp  hdfs://master-9331fa9:8020/apps/hive/warehouse hdfs://master-b882990:8020/warehouse/tablespace/managed/ 

复制老集群外部表数据到新集群

以 hive 账号执行以下命令:

Plain Text
1hadoop fs -rm -r /warehouse/tablespace/external/hive
2hadoop distcp  hdfs://master-9331fa9:8020/warehouse/tablespace/external/hive hdfs://master-b882990:8020/warehouse/tablespace/external/hive 
  1. 修改元数据库数据的位置
Plain Text
1mysql -h 172.18.0.148 -uhive '-pxxx' hive

进入 MYSQL 环境执行以下命令:

Plain Text
1-- managed db location
2update DBS SET DB_LOCATION_URI=replace(DB_LOCATION_URI, 'hdfs://master-9331fa9:8020/apps/hive/warehouse','hdfs://master-b882990:8020//warehouse/tablespace/managed/hive');
3-- external db location
4update DBS SET DB_LOCATION_URI=replace(DB_LOCATION_URI, 'hdfs://master-9331fa9:8020/warehouse/tablespace/external/hive','hdfs://master-b882990:8020/warehouse/tablespace/external/hive');
5-- managed table and partition location
6UPDATE SDS SET LOCATION = REPLACE(LOCATION, 'hdfs://master-9331fa9:8020/apps/hive/warehouse','hdfs://master-b882990:8020/warehouse/tablespace/managed/hive');
7-- external table partition location
8update SDS SET LOCATION=replace(LOCATION, 'hdfs://master-9331fa9:8020/warehouse/tablespace/external/hive','hdfs://master-b882990:8020/warehouse/tablespace/external/hive');
  1. 重启新集群的 metastore 和 hiveserver

进入新集群的 metastore 和 hiveserver 对应的服务器,以 root 身份执行以下命令:

Plain Text
1systemctl start hive-metastore;
2systemctl start hive-server2;
  1. 验证

验证正常。

上一篇
开发指南
下一篇
Hive操作HBase外表