hdfs数据迁移

恩慈2年前技术文章670

通过使用distcp进行数据全量迁移

DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。

标识描述备注
-p[rbugp]Preserve
  r: replication number
  b: block size
  u: user
  g: group
  p: permission
修改次数不会被保留。并且当指定 -update 时,更新的状态会 被同步,除非文件大小不同(比如文件被重新创建)。
-i忽略失败就像在 附录中提到的,这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
-log <logdir>记录日志到 <logdir>DistCp为每个文件的每次尝试拷贝操作都记录日志,并把日志作为map的输出。 如果一个map失败了,当重新执行时这个日志不会被保留。
-m <num_maps>同时拷贝的最大数目指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
-overwrite覆盖目标如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 就像下面提到的,它会改变生成目标路径的语义,所以 用户要小心使用这个选项。
-update如果源和目标的大小不一样则进行覆盖像之前提到的,这不是"同步"操作。 执行覆盖的唯一标准是源文件和目标文件大小是否相同;如果不同,则源文件替换目标文件。 像 下面提到的,它也改变生成目标路径的语义, 用户使用要小心。
-f <urilist_uri>使用<urilist_uri> 作为源文件列表这等价于把所有文件名列在命令行中。 urilist_uri 列表应该是完整合法的URI。


    1.在源集群节点执行命令查看迁移文件

hdfs dfs  -ls /dtInsight/hive/warehouse/zmi_data_par.db

    结果如下共迁移2T数据,7128780文件

        image.png


    2.确定迁移参数

根据统计的文件数文件大小和已知带宽及原集群负载情况可以确定map数为60带宽为400因此确定迁移命令为

nohup hadoop distcp -pb -i -m 60 -bandwidth 400  hdfs://192.168.187.5:9000/dtInsight/hive/warehouse/zmi_data_prd.db/ hdfs://10.128.134.65:9000/dtInsight/hive/warehouse/zmi_data_prd.db/  > /home/admin/distcp_zmi_data_prd.db_0804.log &


3.在目标集群执行命令等待任务结束

image.png


        4.mysql元数据迁移

        执行mysqldump命令对原集群数据库进行备份

        /opt/dtstack/DTBase/mysql/bin/mysqldump -uroot metastore -S /data/my3306/run/mysql.sock > /mnt/hive_metastore_oldcluster_$(date +%F).sql


执行mysqldump命令对目标集群数据库进行备份

/opt/dtstack/DTBase/mysql/bin/mysqldump -uroot metastore -S /data/my3306/run/mysql.sock > /mnt/hive_metastore_newcluster_$(date +%F).sql


步骤一 执行mysqldump将原集群的dump文件恢复到目标集群中

/opt/dtstack/DTBase/mysql/bin/mysql -uroot metastore -S /data/my3306/run/mysql.sock <                                                 hive_metastore_oldcluster_2023-08-01.sql


5.校验数据

使用hdfs count对比目录文件大小和数量,使用hdfs ls -R 将原集群和目标集群相关文件导出,然后使用diff对比




相关文章

K8s中的Service服务

K8s中的Service服务

为何需要 ServiceKubernetes 中 Pod 是随时可以消亡的(节点故障、容器内应用程序错误等原因)。如果使用 Deployment 运行您的应用程序,Deployment 将会在 Pod...

adg切换(RAC TO SINGLE)

adg切换步骤:1、关闭两节点监听和清理外部链接:su - gridsrvctl stop listenerps -ef|grep LOCAL=NO|awk '{print $2}'|xargs ki...

ranger对接hbase 处理class not found

ranger对接hbase 处理class not found

hbase 2.1版本在配置ranger插件,重启hbase时,hmaster无法正常启动,日志显示meta region is in state OPENING此时查看regionserver 中日...

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

1、 FreeIPA介绍Kerberos协议只是一种协议标准的框架,而MIT Kerberos则是实现了该协议的认证服务,是Kerberos的物理载体。将它与Hadoop服务进行集成便能够很好地解决安...

Hue跑shell脚本报没权限问题

Hue跑shell脚本报没权限问题

1、客户反应运行脚本如下:经过排查服务器上没有workflow用户,尝试用root、admin测试正常 2、调用脚本运行失败1、给予脚本执行权限 chmod +x data-test.sh 2、/u...

MySQL运维实战之ProxySQL(9.9)proxysql自身高可用

MySQL运维实战之ProxySQL(9.9)proxysql自身高可用

proxysql作为一个程序,本身也可能出现故障。部署proxysql的服务器也肯能出现故障。高可用架构的一个基本原则是消除单点。可以在多个节点上部署proxysql,在proxysql之前再加一层负...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。