由于会遇到诸如集群版本升级、硬件设施更新、或是集群搬迁等情况。为保证用户能在这些特定的意外情况下仍可以正常继续使用服务,需对相关组件及数据进行数据迁移。迁移方案整体要求如下:
1.数栈搭建完成;
2.源端与目标端网络通;
3.建议版本一致。
根据实际业务使用情况,hadoop数据从数据量上比重较大,迁移方案分为两阶段:
第一阶段.全量迁移hadoop数据(即hdfs/hive)
第二阶段.增量迁移hadoop数据,然后迁移mysql、prometheus。
如开启kerberos安全认证,需对两集群进行互信并建立相同租户及目录避免迁移过程中存在权限问题
考虑数据量建议按照目录分批执行,一般迁移目录为/user/hbase /warehouse /dtInsight,根据用户实际目录配置及业务需求来确定。
为保证目标集群与源集群数据完全一致,登入源集群执行
hadoop distcp -update/overwirte -delete hdfs://源集群ANN ip:port/src hdfs://目标集群ANN ip:port/dst
例: hadoop distcp -update -delete hdfs://172.16.101.153:9000/hp hdfs://172.16.101.44:9000/hp
注:①-overwrite参数可覆盖相同文件名文件
② -delete参数删除源集群不存在而目标集群存在文件,结果如下
目标集群结果
③-bandwidth限制带宽,单位为M
登入源集群及目标集群执行
hdfs dfs -count -q -v /迁移目录
对比目录数、文件数、总大小是否一致。
测试传输5.2G数据耗时约10分钟,即每分钟0.52G。
根据工信部迁移情况,迁移可能受文件数影响,540G数据迁移大致耗费30小时,即每分钟0.3G与测试时间出入不大,如果存在单库多表的情况,建议迁移hive单表分批次执行迁移命令,确保hive表数据完整无异常。
增量迁移Hadoop时需建议停止业务,如日更新数据量较大或者目录较多可以根据实际需求决定是否停服,不停服仅影响有变更数据目录两集群数据一致性,可通过全量迁移方案校验一致性。
与Hadoop全量迁移方案相同。
增量迁移仅需 -update参数,迁移命令如下:
hadoop distcp -update hdfs://源集群ANN ip:port/src hdfs://目标集群ANN ip:port/dst
例: hadoop distcp -update hdfs://172.16.101.153:9000/hp hdfs://172.16.101.44:9000/hp
注:-update会根据文件名及大小判断是否进行传输,减少传输量
后续操作需要停止hadoop服务。
由于MySQL数据量不会较大,等Hadoop迁移完成后直接停库或服务即可进行全量同步。
如单纯使用MySQL数据库,应停止业务。
3.1.1 完全备份数据库
mysql bin目录下执行命令./mysqldump -uuser -password --databases databasename > /data/backsql/testdb_`date +%F`.sql
例:./mysqldump -h127.0.0.1 -udrpeco -pDT@abc#123 api > /data/backsql/api_`date +%F`.sql
3.1.2 将dump文件传到目标服务器
本地执行scp /data/backsql/testdb_`data+%F`.sql dst_user@dst_ip:/data/backsql/
例:scp /data/backsql/api_`date +%F`.sql root@172.16.101.129:/data/backsql
3.1.3 将数据文件导入目标MySQL
执行命令./mysql -uuser -password testdb < /data/backsql/testdb_`data +%F`.sql
例./mysql -h127.0.0.1 -udrpeco -pDT@abc#123 api < /data/backsql/api_`date +%F`.sql
进入数据库进行随机select查询数据对比结果。
测试12G耗时约10分钟,传输峰值23M/s,均值17M/s。
原文:https://www.cnblogs.com/hackerer/p/14769361.html