先迁移元数据
迁移mysql,保证2边的hdfsservice的location相同
迁移hdfs前要设定计划,假设数据1PB,里面有很多大表,最好能统计每个表的数据量以及大小
hdfs dfs -du -sh /user/hadoop/data
制定计划,进行分步骤迁移(小表直接按目录迁移,大表分区迁移)
预估迁移速度。假设宽带是万兆带宽,10Gb,算上损耗,实际应该是1GB/s,如果业务占用750mb/s,那么剩余的还有250mb/s。此时给5个map,每个map 带宽50mb/s
假设有100g的一张表,那么最快速度是400秒跑完,算上实际mapreduce以及校验,+70%。大概是700秒。11分钟左右。
实际测试确实是11分钟到12分钟。不进行参数优化,耗时大概是迁移网速带宽的导入数据实际 * 170%
加跳过测试,在distcp后面加上这个-skipcrccheck -i (-skipcrccheck跳过校验,-i是忽略失败,大表有增量写入百分之百失败,所以先迁移分区,最后切业务写入)
停机方式(简单)
hive数据迁移:
hive有2种存储方式,存磁盘或者hdfs,2者操作一样,磁盘就scp过去。
hdfs就distcp过去。
hadoop distcp -Dmapreduce.job.hdfs-servers.token-renewal.exclude="xx.xx.xx.xx" -i -strategy dynamic -log /hdfs_migration/None/日志路径 -bandwidth 100 -m 100 hdfs://xx.xx.xx.xx:8020/user/hive/warehouse/xx.db/table_name/* hdfs://xx.xx.xx.xx2:8020/user/hive/warehouse/xx.db/table_name/*
这段代码的意思是
-Dmapreduce.job.hdfs-servers.token-renewal.exclude
设置HDFS服务器的配置,排除指定的IP地址以避免进行令牌续期。
-i
: 表示在复制过程中忽略已存在的文件,不覆盖目标目录中的文件。
-strategy dynamic
: 使用动态策略,根据输入数据量和集群资源动态调整任务的映射器数量,以优化复制性能。
-log /hdfs_migration/
指定存放操作日志的路径-bandwidth 100 -m 100 代表每个map传送的宽带是每秒100mb,-m指的是 启动100个map
hive表迁移:
hive有2种表方式,磁盘和关系型数据库,一般我们都是用mysql,2者操作一样。
磁盘scp,mysql的话将mysql的hive库和表同步过去。
同步方式很多,导出sql,用工具navicat,同步脚本。这里就不写具体方式, 比较简单。
如果原表有分区,那么需要在迁移后的表,迁移数据后,进行分区修复。
进入迁移后的hive后输入
msck repair table xxx
如果迁移失败,导致没有元数据,那么需要重新建表。
先查看原表的结构,在原来的hive里或者beeline中。
show create table xxx
然后通过脚本导出为不带边框的表sql
beeline --showHeader=false --outputformat=dsv -e "show create table 库名.表名" > /xx.sql
然后进入迁移后的表,迁移数据后,进入hive在将这个建表sql建立一下。