前言
HBase 提供了一种集群复制机制,允许您使用源集群的预写日志 (WAL) 来传播更改,从而使一个集群的状态与另一个集群的状态保持同步。集群复制的一些用例包括:
-
备份和灾难恢复
-
数据聚合
-
地理数据分布
-
在线数据摄取与离线数据分析相结合
一、串行复制
注意:此功能在 HBase 2.1 中引入
串行复制支持按照日志到达源集群的顺序将日志推送到目标集群,在 HBase 的复制中,我们通过读取每个区域服务器中的 WAL 将突变推送到目标集群。我们有一个 WAL 文件队列,因此我们可以按照创建时间的顺序读取它们。但是,当源集群发生 region move 或 RS failure 时,在region move或RS failure之前未推送的hlog条目将由原始RS(用于region move)或另一个RS(用于RS failure)推送 ,并由现在服务于该区域的RS推送相同区域的新hlog条目,但它们在没有协调的情况下同时推送同一区域的 hlog 条目。
如上图这种处理可能会导致源集群和目标集群之间的数据不一致:
-
put操作和delete操作写入源集群。
-
由于 region-move / RS-failure,它们被不同的复制源线程推送到目标集群。
-
如果 delete 在 put 之前被推送到 peer 集群,并且在 put 推送到 peer 集群之前在 peer 集群中发生了 flush 和 major-compact,则删除被收集并且 put 保留在 peer 集群中,但在源集群中 put 被删除,因此源集群和目标集群之间的数据不一致。
二、串行复制配置
1. 修改Master 集群 hbase-site.xml 文件,添加以下内容,重启集群
<property>
<name>hbase.replication</name>
<value>true</value>
<description>开启replication功能</description>
</property>
注意:CDH 可以直接点击hbase组件,选择配置根据参数名称进行搜索
2. 主集群执行以下命令,开启复制关系
hbase> listadd_peer '1', CLUSTER_KEY => "server1.cie.com:2181:/hbase", SERIAL => true
3. 主集群新建表
hbase> create 'student', {NAME=>'class', REPLICATION_SCOPE=>'1'}
参数详解:REPLICATION_SCOPE的取值范围为(0,1,2)
0:本地模式,当前数据不会被复制;
1:全局模式,此数据会被复制给所有peer;
2:连续模式,数据会按照队列ID的顺序复制给所有的peer。
4. 备集群创建相同的表
hbase> create 'student', {NAME=>'class'}
5. 主集群添加数据
hbase> put 'student','1001','class:name','zhangsan'
hbase> put 'student','1001','class:age','13'
hbase> put 'student','1002','class:name','lisi'
hbase> put 'student','1002','class:age','14'
6. 主机群执行以下命令查看数据是否插入成功
hbase> scan 'student'
7. 备集群执行以下命令查看是否复制成功
hbase> scan 'student'
三、验证复制数据
`VerifyReplication`包含在 HBase 中的MapReduce 作业对两个不同集群之间的复制数据进行系统比较。在主集群上运行 VerifyReplication 作业,为其提供用于验证的对等 ID 和表名。您可以通过指定时间范围或特定系列来进一步限制验证。作业的简称是`verifyrep`。要运行作业,请使用以下命令:
~~~sh
$ HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` "${HADOOP_HOME}/bin/hadoop" jar "${HBASE_HOME}/hbase-mapreduce-VERSION.jar" verifyrep --starttime=<timestamp> --endtime=<timestamp> --families=<myFam> <ID> <tableName>
~~~
该`VerifyReplication`命令打印出计数器以指示`GOODROWS`正确复制和`BADROWS`未正确复制的行。
示例:
~~~sh
hbase org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication -mappers 5 -bandwidth 1024 1 student
~~~
正确复制:
未正确复制的行:
四、集群复制管理命令
-
add_peer <ID> <CLUSTER_KEY> :在两个集群之间添加复制关系
-
ID — 一个唯一的字符串,不能包含连字符。
-
CLUSTER_KEY:使用以下模板组成,带有适当的占位符::`hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent`. 此值可在主 UI 信息页面上找到。
-
状态(可选):启用或禁用,默认值为启用。
-
list_peers:列出此集群已知的所有复制关系。
-
enable_peer <ID> :启用以前禁用的复制关系。
-
disable_peer <ID> :禁用复制关系。HBase 将不再向该对等集群发送编辑,但它仍会跟踪重新启用时需要 复制的所有新 WAL。只要对等点存在,WAL 就会在启用或禁用复制时保留。
-
remove_peer <ID> :禁用并删除复制关系。HBase 将不再向该对等集群发送编辑或跟踪 WAL。
-
enable_table_replication <TABLE_NAME> :为其所有列族启用表复制开关。如果在目标集群中找不到该表,那么它将创建一个具有相同名称和列族的表。
-
disable_table_replication <TABLE_NAME> :禁用所有列族的表复制开关。
-
status 'replication':查看数据同步状态。
本期内容就到这里了,如果喜欢就点个关注吧,微信公众号搜索“数 新 网 络 科 技 号”可查看更多精彩内容~