HDFS数据迁移

背景介绍

这里记录一次迁移HDFS数据的过程
需求 :从A私有云hadoop2.10.2集群将所有数据迁移到B私有云HDFS集群hadoop 3.3.6
限制 :网络限制,只能申请开通A集群的一个端口14000供B集群访问
方案 :在目的集群B上 使用 dictcp 命令 A集群启动 HttpFS 服务作为代理,使用 WebHDFS 协议请求数据,每次迁移一级目录中的一个目录。
完成情况:整个集群有2T的数据,迁移总耗时8天,这个速度还能提升,因为一直有个连接超时导致任务卡顿的问题没有解决。

迁移步骤

1. 修改源集群A的httpfs配置文件

1.1 $HADOOP_HOME/etc/hadoop/httpfs-site.xml 文件增加如下内容

xml 复制代码
<property>
  <name>httpfs.http.hostname</name>
  <value>0.0.0.0</value>
</property>
<property>
  <name>httpfs.http.port</name>
  <value>14000</value>
</property>
<property>
  <name>hadoop.proxyuser.root.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.root.groups</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.http.authentication.type</name>
  <value>simple</value>
</property>
<property>
  <name>hadoop.http.authentication.simple.anonymous.allowed</name>
  <value>true</value>
</property>

1.2 修改 httpfs tomcat 配置文件

主要解决一直超时断开导致后续任务终止的问题

bash 复制代码
$HADOOP_HOME/share/hadoop/httpfs/tomcat/conf/server.xml

设置超时时间

bash 复制代码
connectionTimeout="2000000"

2. 启动源集群A的httpfs服务

bash 复制代码
$HADOOP_HOME/sbin/httpfs.sh start

3. 目的集群B执行 distcp 命令传输文件

切换至hadoop用户

bash 复制代码
su - hadoop

执行命令

bash 复制代码
 nohup hadoop distcp \
  -Dmapreduce.task.timeout=0 \
  -Dmapreduce.task.stuck.timeout-ms=0 \
  -Ddfs.webhdfs.socket.connect-timeout=300000 \
  -Ddfs.webhdfs.socket.read-timeout=600000 \
  -Dipc.client.connect.timeout=300000 \
  -Dipc.client.connect.max.retries=10 \
  -Dipc.client.connect.retry.interval=10000 \
  -Ddfs.http.client.retry.policy.enabled=true \
  -Ddfs.http.client.retry.policy.spec=2000,5,10000,5 \
  -skipcrccheck \
  -update \
  -m 5 \
  -bandwidth 50 \
  -numListstatusThreads 10 \
  -i \
  -strategy dynamic \
  webhdfs://46.11.22.33:14000/1HGP6THTM \
  hdfs://192.168.1.2:8020/1HGP6THTM > /data/great/logs/1HGP6THTM.out 2>&1 &

1HGP6THTM 是其中一个目录

4. 迁移过程中实时监控状态

切换至hadoop用户

bash 复制代码
su - hadoop

查看distcp进程是否存在

bash 复制代码
ps aux | grep distcp

检查日志

bash 复制代码
tail -f /data/great/logs/1HGP6THTM.out

检查文件数量和大小

bash 复制代码
hdfs dfs -count '/1HGP6THTM' | awk '
{
    bytes=$3
    if (bytes >= 1099511627776) {
        size=sprintf("%.2f T", bytes/1099511627776)
    } else if (bytes >= 1073741824) {
        size=sprintf("%.2f G", bytes/1073741824)
    } else if (bytes >= 1048576) {
        size=sprintf("%.2f M", bytes/1048576)
    } else if (bytes >= 1024) {
        size=sprintf("%.2f K", bytes/1024)
    } else {
        size=sprintf("%d B", bytes)
    }
    printf "目录名: %-35s \t 子目录数: %5s \t 文件数: %10s \t 总大小: %12s\n", $4, $1, $2, size
}'

迁移完成

5 迁移完成后数据统计

切换至hadoop用户

bash 复制代码
su - hadoop

统计集群占用总空间

bash 复制代码
hdfs dfs -du -s -h /

统计第一层子目录占用空间情况

bash 复制代码
hdfs dfs -count '/*' | awk '
{
    bytes=$3
    if (bytes >= 1099511627776) {
        size=sprintf("%.2f T", bytes/1099511627776)
    } else if (bytes >= 1073741824) {
        size=sprintf("%.2f G", bytes/1073741824)
    } else if (bytes >= 1048576) {
        size=sprintf("%.2f M", bytes/1048576)
    } else if (bytes >= 1024) {
        size=sprintf("%.2f K", bytes/1024)
    } else {
        size=sprintf("%d B", bytes)
    }
    printf "目录名: %-35s \t 子目录数: %5s \t 文件数: %10s \t 总大小: %12s\n", $4, $1, $2, size
}'
相关推荐
AI星桥小王子1 小时前
支持人物一致性的 AI 视频生成方案分享:怎么能解决 “人脸漂移” 痛点
大数据·人工智能
数智化管理手记2 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
晓子文集9 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare
FII工业富联科技服务9 小时前
工业设备运维如何Agentic化?拆解Factory Brain的设备运维架构
大数据·运维·人工智能·架构·制造
qq295310 小时前
2026 财搭子决策模拟器:多智能体投研架构能力拆解
大数据·人工智能·架构
Ai拆代码的曹操12 小时前
Git 集成:AI 代理中的版本控制工作流设计
大数据·git·elasticsearch
lazy H13 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
晓子文集14 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
ApacheSeaTunnel14 小时前
Apache SeaTunnel 2.3.12 进阶实战:MySQL to PostgreSQL 5 套生产场景同步 Demo
大数据·开源·数据集成·seatunnel·技术分享·数据同步
phltxy15 小时前
LangChain v1 Agent核心能力详解
大数据·人工智能·langchain