Hbase是否有区域复制

Does Hbase have region replications

我知道 Hbase 有 WAL 和 Hfile 的副本,但所有这些都作为持久性存储在 HDFS 中。因此 Hbase 也会提供区域级别的副本。我们知道Region包含BlockCache和MemCache,如果只有一个Region实例处理请求,Hbase如何解决热点请求。

此外,如果只有一个区域实例,Hbase 将始终保持一致性,对吗?因为所有读者都只是从一个区域读取,他们总是看到相同的数据?谢谢!

HBase 的最新版本有一个称为“区域复制”的功能。

对于一个table的每个区域,可以有多个副本,在不同的Region Server中打开。默认情况下,区域复制设置为 1,因此仅部署单个区域副本,并且与原始模型没有任何变化。如果区域复制设置为 2 或更多,则主服务器分配 table 区域的副本。负载均衡器确保区域副本不会共同托管在同一区域服务器和同一机架中(如果可能)。

要启用,请在 hbase-site.xml 中设置 hbase.region.replica.replication.enabled to true

正在创建具有高可用性区域的 tables:

CREATE 't1', 'f1', {REGION_REPLICATION => 2}

HBase 为获取或扫描操作提供一致性模型。

public enum Consistency {
   STRONG,
   TIMELINE
 }

Consistency.STRONG是HBase默认提供的一致性模型。如果 table 的区域复制 = 1,或具有区域副本但读取是在启用时间一致性的情况下完成的,则读取始终由主要区域执行

查询次区域:

Get get = new Get(row); 
get.setConsistency(CONSISTENCY.TIMELINE);
...
Result result = table.get(get); 

待扫描

scan 't1', {CONSISTENCY => 'TIMELINE'}

更多详情可以参考this