hbase1版本向hbase2版本表数据迁移;
#这里使用hbase的 Snapshot功能实现
1、源集群 flush刷新内存数据到磁盘
hbase> flush '7d8f7d560e9ef7d355bff43a60b0d226'
7d8f7d560e9ef7d355bff43a60b0d226 来自于校验和,可以在hbase控制台中查看。注意,如果有多个region那么需要对每个region都执行,类似于图中:
并且,如果条件允许,尽可能disable表;
2、源集群 ,创建表快照
hbase> snapshot '表名', '快照名' #创建命令
查看快照命令:list_snapshots
删除快照命令:delete_snapshot
我这里是已经disable表了
将快照目录和表目录导出到主机本地:
3、传输数据到目标集群
这里采取通过手动方式(distcp,scp,hdfs dfs -cp)直接把源hbase目录下的快照目录和数据目录拷贝到目标集群;
集群间通的话,也可以使用MR任务去传输;
把源集群的快照目录和表目录scp到目标集群的主机上:
scp -r app_precision_marketing.label_precision_marketing_user_internal_little root@172.xx.xx.xx:/tmp/
scp -r snapshot_app_precision_marketing.label_precision_marketing_user_internal_little root@172.xx.xx.xx:/tmp/
4、[目标集群] 把从源集群传过来的快照目录和表目录上传到hbase的数据目录中
保证目标集群中没有这张表,如果有的话,并且不用的话,可以删除,参考:hbase2强制删除表 - 秋刀鱼的滋味w - 博客园 (cnblogs.com)
如果目标集群中已经存在这张表,是不能迁移的;
看一下HDFS上的目录权限是否正确,不正确的话需要更改权限;
5、目标集群
使用clone_snapshot 'snapshot_name, 'tableName' 修复元数据
可见表已经出现了,并且可以查询了: