背景:需要把阿里云的客户数据迁移到腾讯云环境;腾讯云环境已经部分新客户的数据。

为了保证迁移到腾讯云的历史客户,依然能访问到他们的历史数据;需要注意迁移后不能覆盖腾讯云环境的表数据(即增量迁移),同时要求不能停表停服务。

方案选型:

1.distcp 需要停表停服务;

2.Import/Export 比较稳妥,先下载文件,后传到腾讯云环境;

3.snapshot 速度快,需要目标集群没有该表;

4.从归档的历史数据通过代码写入,工作量大;

5.replication 方式,只能实现主集群变更,实时同步给目标集群;

实施:

1.将阿里云环境的user表最近两年的版本号为1的数据下载为压缩文件;

nohup hbase org.apache.hadoop.hbase.mapreduce.Export \ -D mapreduce.output.fileoutputformat.compress=true \ -D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec \ -D mapreduce.output.fileoutputformat.compress.type=BLOCK \ -Ddfs.client.socket-timeout=240000000 \ -Dipc.client.connect.timeout=40000000 \ -Dmapreduce.task.timeout=1800000 \ -D hbase.client.scanner.caching=20000 \ -D hbase.export.scanner.batch=2000 \ -D hbase.export.scanner.caching=20000 \ -D mapreduce.map.memory.mb=1024 \ -D mapreduce.reduce.memory.mb=1024 \ -D yarn.app.mapreduce.am.resource.mb=1024 \ user /data/hbaseExportBak/user/user_2022-07-07/ 1 1622476800000 1657209600000 &> /var/lib/hadoop-hdfs/2022-07-07.log &

 2.将下载的文件distcp导入到腾讯云的hdfs集群;

3.将数据直接导入到腾讯云的灰度环境,此时报 memorystore 被写满的错误f,同时hbase发生告警,原因是写的数据太多,直接刷满了memorystore;因此,不建议,直接这样写入hbase;

hbase org.apache.hadoop.hbase.mapreduce.Import \ -Ddfs.client.socket-timeout=240000000 \ -Dipc.client.connect.timeout=40000000 \ -Dmapreduce.task.timeout=1800000 \ -D mapreduce.map.memory.mb=5120 \ -D mapreduce.reduce.memory.mb=5120 \ -Dmapreduce.task.timeout=1800000 \ -D yarn.app.mapreduce.am.resource.mb=5120 \ user /data/hbaseExportBak/user/user_2021-07-07/

4.增加参数 -Dimport.bulk.output ,采用bulkload方式导入,先将export出来的数据,转为HFile文件,然后批量写入hbase;

 hbase org.apache.hadoop.hbase.mapreduce.Import \ -D hadoop.tmp.dir=/data/hbase-tmp/ \ -Ddfs.client.socket-timeout=240000000 \ -Dipc.client.connect.timeout=40000000 \ -Dmapreduce.task.timeout=1800000 \ -D mapreduce.map.memory.mb=5120 \ -D mapreduce.reduce.memory.mb=5120 \ -Dmapreduce.task.timeout=1800000 \ -D yarn.app.mapreduce.am.resource.mb=5120 \ -Dimport.bulk.output=/data/hbaseExportBak/user/userHFile/user_2022/ \ user /data/hbaseExportBak/user/2022-07-07/

操作往往不是那么顺利的,在进行上述操作时出现本地磁盘写满的问题,因为hbase hadoop.tmp.dir 参数是运维搭建时是默认的;这样会起一个mr拉取hdfs的数据,默认先下载到本地磁盘目录,然后在本地转换完成再传到import.bulk.output 对应的目录,然后再清空本地写入的数据;因此,你需要选择一个允许大量数据的文件目录;或者手动添加参数修改 hadoop.tmp.dir 目录为hdfs的目录,这样就不会占用本地的磁盘;

5.将转换为HFile文件的目录(/data/hbaseExportBak/user/userHFile/user_2022/)bulkload导入到hbase ;

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=102400 \ /data/hbaseExportBak/user/userHFile/user_2021/ user

 

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。