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
}'
相关推荐
段一凡-华北理工大学1 分钟前
工业领域的Hadoop架构学习~系列文章03:MapReduce编程模型深度解读
大数据·人工智能·hadoop·学习·架构·高炉炼铁·高炉智能化
Aloudata4 分钟前
语义层 vs 数据中台:轻量语义架构与重型中台路线的深度对比与选型建议
大数据·数据分析·agent·指标平台·数据中台
狒狒热知识5 分钟前
软文营销媒体发稿行业规范化发展与企业品牌传播安全保障
大数据·人工智能
2601_957888566 分钟前
短视频矩阵获客系统的设计与实践:提升企业数字营销效率的路径
大数据·人工智能·矩阵·企业增长
2601_957879338 分钟前
企业矩阵系统建设实践:从账号管理到AI内容协同
大数据·人工智能·矩阵系统·数字化运营
Cx330❀22 分钟前
【Linux网络】从零构建高性能UDP服务器:从Echo到英译汉业务级实现
大数据·linux·服务器·开发语言·网络·c++·udp
大大大大晴天️31 分钟前
告别 Lambda 架构!Flink 批流一体底层原理解析
大数据·flink
weelinking37 分钟前
【产品】10_搭建前端框架——把你的原型变成真实页面
java·大数据·前端·数据库·人工智能·python·前端框架
无关868840 分钟前
StarRocks 存算分离 + Spark + Hive Metastore + MinIO 数据湖搭建全流程
大数据·hive·spark
狒狒热知识9 小时前
AI赋能下企业新闻内容优化178软文网赋能权威资讯形成持续积累效应
大数据