项目现状:
项目上需要更换底层云服务器商,需要将老项目环境hadoop数据迁移到新服务器hadoop上。
老项目环境hadoop配置:
通过K8s集群部署的datanode节点数11个,分布在11台云服务器节点上,hdfs中三副本机制存储,三副本数据总量在4T左右。
新项目环境hadoop配置:
通过K8s集群部署的datanode节点9个,分布在9台云服务器节点上,hdfs中三副本机制存储。
原计划采用hadoop distcp,通过新旧环境的namenode地址配置迁移命令,后发现由于新旧环境网络策略影响,迁移过程中无法相互访问通对应的datanode地址,因此配置namenode的迁移方式失败。改用httpfs地址进行迁移。
在迁移过程中发现:
1.用户的部分分区表数据文件个数较多,存在一个库下一万多张表,部分表下有一千多个分区几万个数据文件。
2.配置较大的迁移速率会导致datanode节点超时下线。
受网络策略影响,最后源地址使用httpfs地址,目的地址使用namenode地址,从目的端namenode向源端httpfs同步数据。(最好是从源端同步数据到目的端)
迁移脚本:
https://github.com/HeGuanhao/test/blob/master/hdfs_migration/hdfs_distcp_migrate.sh
执行命令:
powershell
nohup ./hdfs_distcp_migrate.sh > /dev/null 2>&1 &