Hbase是否有区域复制

时间:2016-01-30 23:33:29

标签: hbase

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

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

1 个答案:

答案 0 :(得分:3)

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

对于表的每个区域,可以有多个副本在不同的区域服务器中打开。默认情况下,区域复制设置为1,因此只部署了一个区域副本,并且原始模型没有任何更改。如果区域复制设置为2或更多,则主服务器将分配表的区域的副本。 Load Balancer确保区域副本不在同一个区域服务器中共存,也可以在同一个机架中(如果可能)。

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

创建具有高可用性区域的表:

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

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

public enum Consistency {
   STRONG,
   TIMELINE
 }

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

查询次要区域:

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

用于扫描

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

有关详细信息,请参阅this