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
}'
相关推荐
演艺大赏42 分钟前
NiFi 数据流实战:FTP→HDFS 与 CSV→Parquet,附坏数据、漏文件与双写
大数据
数字新视界2 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
wafrdggh3 小时前
2026 商城小程序平台哪个价格合理?把跨境附加成本这个坑算透
大数据·小程序
昂永科技|非标件自动报价系统4 小时前
# 昂永(上海)科技非标件自动核价系统落地无锡先导,助力制造核价数字化
大数据·科技·制造
xiaomuzuirenzhen15 小时前
大专电子商务从事电商运营分析师需要考证吗?
大数据·数据库
大大大大晴天16 小时前
ReAct Agent 从原理到实现:让大模型学会思考、行动与观察
大数据·agent
大大大大晴天17 小时前
每天认识一个组件:Apache StreamPark
大数据
演艺大赏1 天前
NiFi 的权限模型不是 RBAC:users.xml、authorizers.xml 与组件级策略
大数据
yuanyuan3341 天前
2026枣庄带检测报告伸缩门品牌测评|本地服务
大数据·数据库·人工智能·伸缩门