背景:需要把阿里云的客户数据迁移到腾讯云环境;腾讯云环境已经部分新客户的数据。
为了保证迁移到腾讯云的历史客户,依然能访问到他们的历史数据;需要注意迁移后不能覆盖腾讯云环境的表数据(即增量迁移),同时要求不能停表停服务。
方案选型:
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文章来源:https://www.toymoban.com/news/detail-617363.html
文章来源地址https://www.toymoban.com/news/detail-617363.html
到了这里,关于HBase数据迁移(阿里云到腾讯云实战)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!