HBase数据迁移(阿里云到腾讯云实战)

本文介绍了如何从阿里云的HBase环境迁移历史客户数据至腾讯云HBase环境,重点讨论了在不中断服务的情况下进行增量迁移的挑战和解决方案。首先使用Export将数据导出并压缩,然后通过Distcp导入到腾讯云HDFS,但由于直接导入会导致内存问题,故改用Bulkload方式,将数据转换为HFile后再批量写入。在实际操作中,还需注意避免本地磁盘空间不足的问题。
摘要由CSDN通过智能技术生成

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

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

方案选型:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值