Hbase Replicaition实现

最近公司在实现hbase表灾备数据同步,初步定两个方案:一、对于存量数据用hbase表导入导出功能。二、对于增量数据用hbase replication功能实现实时同步。
一、hbase表导入导出功能容易实现,hbase org.apache.hadoop.hbase.mapreduce.Export [ [ []]] 将表导出;然后用distcp命令将导出表发送到备集群;hbase org.apache.hadoop.hbase.mapreduce.Import 将数据导入hbase即可实现。
二、在用hbase replicaition功能能踩过一个坑,在查资料和官方文档命令并不复杂,但有个细节需注意,
1、建表create ‘student’,{NAME=>‘f’,REPLICATION_SCOPE => ‘1‘’},注意开启复制功能
Hbase Replicaition实现
2、add_peer ‘11’, “master1,master2,worker1:2181:/hbase”(注意:这里写上备集群zookeeper地址,域名或ip均可);
3、set_peer_tableCFs ‘11’, “student”(没有这一步也可);
4、在备集群建一个相同表即可create ‘student’,‘f’,正常情况执行上述步骤即可实现实时同步;
下面说下踩过的坑:
1、如果备集群没有手动建表,可以用命令enable_table_replication ‘student’自动创建,我在执行时会在备集群建同样的表,但是会报错,现在没解决,不过不影响功能使用。
2、下面这个错困扰了我一天时间,就是按照上面所有操作后,仍不能实现同步,最终发现是域名问题,刚才说过在add_peer时写备集群zookeeper时可以是域名也可以是ip,但当找到备集群zookeeper时,zookeeper对应目录下备集群注册时用的是域名,本集群如果没有配集群域名时不会报错,但数据不会同步,regionserver在zookeeper保存的信息如下图:
Hbase Replicaition实现
主集群在找到备集群zookeeper时,还要找到备集群regionserver,如过主集群没有配置备集群域名,同步数据就不能实现,我在主集群配置备集群域名如下:Hbase Replicaition实现
我在这里遇到的最大坑是主集群没有配置备集群域名,当时没查到资料,有同样问题的朋友注意一下。