文档首页/ MapReduce服务 MRS/ 最佳实践/ 数据迁移/ 使用distcp迁移Hive数据至MRS集群
更新时间:2025-09-04 GMT+08:00
分享

使用distcp迁移Hive数据至MRS集群

应用场景

distcp(Distributed Copy)是Hadoop提供的一个分布式复制工具,用于在HDFS集群之间、HDFS与本地文件系统之间或同一集群内高效复制大量数据。它充分利用Hadoop的分布式计算能力,通过MapReduce框架并行处理复制任务,大幅提升大数据量的复制效率。

通过distcp命令,可以将自建Hive集群中存储在HDFS的数据,直接迁移至MRS集群。

本章节介绍了在完成Hive元数据迁移后,通过distcp工具迁移全量Hive业务数据或增量Hive业务数据至MRS集群。

更多关于distcp的详细命令参数说明,请参考distcp常见用法

方案架构

Hive数据迁移至MRS集群,通常迁移流程如图1所示。

图1 Hive数据迁移方案
  • 历史数据迁移。

    在源Hadoop集群为需要迁移的目录上创建快照,然后在MRS集群客户端上提交distcp全量迁移命令,选择目标端路径为OBS或HDFS。

  • 分区修复。

    使用msck repair table db_name.table_name命令对分区表进行修复分区操作。

  • 增量业务数据迁移

    在源Hadoop集群为需要增量迁移的目录上创建快照,然后在MRS集群客户端上添加“-update -delete”参数进行增量迁移,选择目标端路径为OBS或HDFS。

数据迁移方案支持各种网络选型,如公网、VPN、云专线等,根据实际情况选择网络方案,确保两端网络互通即可。

表1 数据迁移网络方案说明

迁移网络类型

优点

缺点

专线

  • 性能稳定,时延低至毫秒级。
  • 带宽选择范围可达几十Gbit/s。
  • 数据传输安全性高。
  • 成本高,一般需包年包月。
  • 源端和目的端私网IP地址不能重叠。
  • 开通时间长,一般需提前1个月申请。

VPN

  • 组网灵活,随时搭建。
  • 稳定性较好,安全性较好。
  • 成本适中。
  • 时延较高。
  • 源端和目的端私网IP地址不能重叠。

公网 IP

  • 支持源端和目的端私网IP一致的情况下实施迁移。
  • 带宽任意选择。
  • 即买即用,快速绑定成本低。
  • 带宽可能无法全部利用,迁移速率相对较慢。
  • 公网传输数据有泄漏风险。

约束与限制

  • 迁移目标端为OBS桶时,distcp不支持增量迁移方式(因为OBS不支持快照)。
  • 数据迁移前需提前了解用户业务并确定迁移时间窗,建议在业务低谷期进行迁移。

前提条件

  • 已创建好包含有Hive组件的MRS集群。
  • 已准备一台ECS执行节点,并安装MRS集群客户端。
  • 源集群、目标集群与MRS集群客户端所在节点的网络已打通。
  • 已完成Hive元数据的迁移。

使用distcp全量迁移Hive数据

  1. 获取源集群中HDFS NameNode主节点的IP地址和端口。

    不同自建集群的查询方式不同,可联系集群管理员确认或登录对应集群管理界面中查询。

    图2 查看HDFS NameNode端口

  2. 登录目标MRS集群的Manager管理界面,查看HDFS NameNode主节点的IP地址和端口。

    1. 单击“集群 > 服务 > HDFS > 实例”,查看实例列表中“NameNode (hacluster,主)”实例对应的IP地址。
    2. 单击“配置”,搜索并查询NameNode端口配置参数“dfs.namenode.rpc.port”。

  1. 调研获取源集群中需要迁移的Hive数据对应的HDFS文件目录地址。

    例如迁移如下数据:

  1. 在ECS执行节点设置用户访问源端HDFS集群。

    vim /etc/profile

    设置环境变量:

    export HADOOP_USER_NAME=hdfs

    加载环境变量:

    source /etc/profile

  1. 为源集群中的指定HDFS目录创建快照,创建完成后保存路径为“/快照目录/.snapshot”。

    1. 开启源集群中指定目录的快照功能。
      hdfs dfsadmin -allowSnapshot 快照目录

      源集群目录格式:hdfs://NameNode主节点IP地址:端口/目录

      例如执行命令如下:

      hdfs dfsadmin -allowSnapshot hdfs://192.168.1.100:8020/warehouse/tablespace/external/hive/bigdata_test.db/
    2. 创建快照。
      hdfs dfs -createSnapshot 快照目录 快照文件名

      例如执行命令如下:

      hdfs dfs -createSnapshot hdfs://192.168.1.100:8020/warehouse/tablespace/external/hive/bigdata_test.db snapshot01

  1. 进入MRS集群客户端目录。

    cd /opt/client
    source bigdata_env

    开启了Kerberos认证的MRS集群需进行用户认证。

    kinit HDFS业务用户

  2. 在MRS集群客户端节点中执行distcp命令进行数据迁移。

    hadoop distcp -prbugpcxt 源端快照保存路径 目的端数据保存路径

    例如执行命令如下:

    hadoop distcp -prbugpcxt hdfs://192.168.1.100:8020/warehouse/tablespace/external/hive/bigdata_test.db/.snapshot/snapshot01/* hdfs://192.168.1.200:8020/user/hive/warehouse/bigdata_test.db

    任务提交后,等待Mapreduce任务执行完成。

  1. 继续参考步骤 5~步骤 7完成其他数据目录的迁移。
  2. 全量迁移完成后,在目标端集群通过客户端或者HDFS WebUI查看文件是否迁移成功。

    例如源端文件:

    目标端文件:

  1. 数据迁移完成后,在目标端通过Hive客户端对分区表进行分区修复,并查看数据是否存在。

    执行命令进入Hive客户端。

    beeline
    • 分区表:
      msck repair table 表名;

      select * from 表名;

    • 非分区表:
      select * from 表名;

使用distcp迁移增量Hive数据

  1. 为源集群中需要增量迁移的目录创建快照。

    hdfs dfs -createSnapshot 快照目录 快照文件名

    例如执行命令如下:

    hdfs dfs -createSnapshot hdfs://192.168.1.100:8020/warehouse/tablespace/external/hive/bigdata_test.db snapshot02

  2. 在MRS集群客户端节点中执行distcp命令进行增量数据迁移。

    hadoop distcp -prbugpcxt 源端快照保存路径 目的端数据保存路径

    例如执行命令如下:

    hadoop distcp -prbugpcxt -update -delete hdfs://192.168.1.100:8020/warehouse/tablespace/external/hive/bigdata_test.db/.snapshot/snapshot02/ hdfs://192.168.1.200:8020/user/hive/warehouse/bigdata_test.db

    任务提交后,等待Mapreduce任务执行完成。

  3. 迁移完成后,在目标端集群通过客户端或者HDFS WebUI查看文件是否迁移成功,查看同步后的文件数量和大小,对比一致性。

    例如源端文件:

    目标端文件:

  4. 数据迁移完成后,在目标端通过Hive客户端对分区表进行分区修复,并查看数据是否存在。

    • 分区表:
      msck repair table 表名;

      select * from 表名;

    • 非分区表:
      select * from 表名;

distcp迁移数据常见问题

  • 版本差异问题

    当源端集群Hadoop版本与MRS版本相同(大版本相同,小版本可以存在差异),同步源端表业务数据至MRS集群命令如下:

    hadoop distcp -prbugpcaxt hdfs://主NameNodeIP地址:端口/快照路径 保存路径

    当源端集群Hadoop版本与MRS版本差异较大,可使用webhdfs或hftp代替HDFS执行以下命令。

    hadoop distcp -prbugpcaxt webhdfs://主NameNodeIP地址:端口/快照路径 保存路径

    或者:

    hadoop distcp -prbugpcaxt hftp://主NameNodeIP地址:端口/快照路径 保存路径
  • 使用distcp命令参数问题
    • -p[rbugpcaxt]:指定了保持的数据对应属性,各属性详情参考distcp常见用法
    • IP地址:源端NameNode提供服务的主节点。
    • 端口:通常HDFS默认开源端口为8020,webhdfs和hftp端口为50070。
    • 当源端集群提供了统一域名访问时,“主NameNodeIP地址:端口”可修改为对应的域名URL。
  • distcp权限限制问题

    使用distcp迁移时,distcp可能会由于权限限制而无法复制文件或目录。

    请确保执行distcp的用户具有足够的权限来读取源文件和写入目标文件,可以使用-p参数保留权限信息。

  • distcp命令修改超时时间

    当使用distcp命令时,如果某些被复制的文件内容较大时,建议修改执行复制任务的Mapreduce的超时时间。

    可以通过在distcp命令中指定“mapreduce.task.timeout”选项实现。

    例如,修改超时时间为30分钟,则命令如下:

    hadoop distcp -Dmapreduce.task.timeout=1800000 hdfs://cluster1/source hdfs://cluster2/target

相关文档