ubuntu

Ubuntu HDFS数据如何迁移

小樊
49
2025-08-30 02:42:55
栏目: 智能运维

Ubuntu环境下HDFS数据迁移指南

一、迁移前准备

  1. 数据量评估
    使用hdfs dfs -du -h /命令查看各目录总数据量,按业务类型(如用户数据、日志数据)划分目录,统计各业务数据规模,为分批迁移提供依据。
  2. 迁移计划制定
    因数据量大且带宽有限,建议在业务低峰期(如夜间)迁移;优先迁移静态数据(如历史日志),再迁移动态数据(如实时交易数据);按业务/目录分批次迁移,降低单次迁移对业务的影响。
  3. 工具选择
    优先使用Hadoop自带的DistCp工具(分布式复制工具),支持大规模数据并行迁移,具备版本兼容性(可处理不同Hadoop版本的集群迁移)。
  4. 环境配置
    确保源集群与目标集群的Hadoop环境变量(如HADOOP_HOMEPATH)配置正确,core-site.xml(配置HDFS地址、RPC端口)、hdfs-site.xml(配置副本数、NameNode信息)等核心配置文件一致或符合迁移需求。
  5. 网络与权限准备
    确认新老集群之间网络互通(可通过pingtelnet测试);若带宽有限,可通过对象存储(如COS)作为中转;确保迁移用户对源集群和目标集群的HDFS目录有读写权限。

二、具体迁移步骤

(一)使用DistCp进行数据迁移

  1. 同版本集群迁移
    若新老集群Hadoop版本一致(如均为3.3.x),可直接使用HDFS协议迁移,命令格式如下:
    hadoop distcp hdfs://source-namenode-ip:9000/source-path hdfs://target-namenode-ip:9000/target-path
    
    示例:将源集群/user/data目录迁移至目标集群同名目录:
    hadoop distcp hdfs://192.168.1.100:9000/user/data hdfs://192.168.1.200:9000/user/data
    
  2. 异版本集群迁移
    若新老集群版本不一致(如源集群1.2.x,目标集群3.3.x),需使用hftp(HTTP协议)或webhdfs协议,命令格式如下:
    hadoop distcp hftp://source-namenode-ip:50070/source-path hdfs://target-namenode-ip:9000/target-path
    
    示例:
    hadoop distcp hftp://192.168.1.100:50070/user/data hdfs://192.168.1.200:9000/user/data
    
  3. 增量数据迁移
    对于迁移后新增或修改的数据,可通过-update参数实现增量同步(仅更新目标集群中不存在或修改过的文件):
    hadoop distcp -update hdfs://source-namenode-ip:9000/source-path hdfs://target-namenode-ip:9000/target-path
    
    若需保留文件权限(如所有者、组、ACL),添加-p参数:
    hadoop distcp -p -update hdfs://source-namenode-ip:9000/source-path hdfs://target-namenode-ip:9000/target-path
    

(二)NameNode元数据迁移(可选,适用于集群升级或替换)

  1. 备份元数据
    在源NameNode服务器上,备份dfs.namenode.name.dir目录(默认路径为/data/dfs/name,包含fsimageedits文件):
    cp -r /data/dfs/name /data/dfs/name_backup
    
  2. 复制元数据到目标集群
    将备份的name目录复制到目标NameNode的相同路径:
    scp -r /data/dfs/name_backup/* target-namenode:/data/dfs/name/
    
  3. 修改文件权限
    确保目标集群的dfs.namenode.name.dir目录权限正确(属主为hdfs用户,属组为hadoop):
    chown -R hdfs:hadoop /data/dfs/name
    
  4. 重启NameNode服务
    在目标集群上重启NameNode,加载复制的元数据:
    hadoop-daemon.sh stop namenode
    hadoop-daemon.sh start namenode
    

(三)DataNode数据迁移(可选,适用于集群扩容)

  1. 下线旧DataNode
    在源集群的slaves文件中移除旧DataNode的主机名,然后重启HDFS服务,触发数据块重新平衡:
    hadoop-daemon.sh stop datanode
    
    使用hdfs dfsadmin -report命令检查旧DataNode是否已下线。
  2. 上线新DataNode
    在目标集群的slaves文件中添加新DataNode的主机名,启动HDFS服务:
    hadoop-daemon.sh start datanode
    
    使用hdfs dfsadmin -report命令检查新DataNode是否已上线。

三、迁移后验证

  1. 数据一致性校验
    使用distcp-update参数再次同步,检查是否有新增或修改的文件;使用hdfs dfs -du -h /target-pathhdfs dfs -count /target-path命令,对比源集群与目标集群的数据量、文件数量是否一致。
  2. 权限与文件类型检查
    使用hdfs dfs -ls -d /target-path命令检查文件权限(如-rw-r--r--)、所有者(如hdfs)、组(如hadoop)是否与源集群一致;检查文件类型(如普通文件、目录、符号链接)是否符合预期。
  3. 功能验证
    运行简单的HDFS操作(如hdfs dfs -put上传文件、hdfs dfs -get下载文件、hdfs dfs -cat查看文件内容),验证目标集群的读写功能是否正常;若有Hive、Spark等依赖HDFS的应用,更新其配置(如hive.metastore.warehouse.dir)指向目标集群,验证应用兼容性。

四、注意事项

  1. 带宽控制
    迁移前通过tc命令(Traffic Control)限制迁移进程的带宽(如限制为100MB/s),避免占用过多网络资源影响线上业务:
    tc qdisc add dev eth0 root tbf rate 100mbit latency 50ms burst 100kb
    
  2. 数据安全
    若集群启用Kerberos认证,需在distcp命令中添加-D ipc.client.fallback-to-simple-auth-allowed=true参数,或配置目标集群的core-site.xml文件:
    <property>
      <name>ipc.client.fallback-to-simple-auth-allowed</name>
      <value>true</value>
    </property>
    
  3. 监控与日志
    迁移过程中使用tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode.log命令监控NameNode日志,及时发现错误;保存distcp命令的输出日志(如distcp.log),便于后续故障排查。
  4. 回滚方案
    迁移前备份源集群的关键数据(如/user/data目录),若迁移失败,可通过备份快速恢复源集群数据,减少业务影响。

0
看了该问题的人还看了