HBase 串行复制

前言   

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 条目。

如上图这种处理可能会导致源集群和目标集群之间的数据不一致:

  1. put操作和delete操作写入源集群。

  2. 由于 region-move / RS-failure,它们被不同的复制源线程推送到目标集群。

  3. 如果 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> :在两个集群之间添加复制关系

  1. ID — 一个唯一的字符串,不能包含连字符。

  2. CLUSTER_KEY:使用以下模板组成,带有适当的占位符::`hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent`. 此值可在主 UI 信息页面上找到。

  3. 状态(可选):启用或禁用,默认值为启用。

  • 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':查看数据同步状态。

本期内容就到这里了,如果喜欢就点个关注吧,微信公众号搜索“数 新 网 络 科 技 号”可查看更多精彩内容~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值