我知道Hbase有WAL和Hfile的复制品,但所有这些都作为持久性存储在HDFS中。 Hbase也将提供区域级复制品。我们知道Region包含BlockCache和MemCache,如果只有一个Region实例处理请求,Hbase如何解决热点请求。
另外,如果只有一个区域实例,Hbase将始终保持一致性,对吗?因为所有读者只是从一个区域读取,他们总是看到相同的数据?谢谢!
答案 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