问题描述
我知道HBase有WAL和HFILE的副本,但所有这些都作为持久性存储在HDFS中。因此,HBase还将提供地区级副本。我们知道Region包含BlockCache和Memcache,如果只有一个Region实例处理请求,HBase如何解决热点请求。
另外,如果只有一个地域实例,HBase将始终保持一致,对吗?因为所有读者只从一个地区阅读,所以他们总是看到相同的数据?谢谢!
推荐答案
最新版本的HBase有一项称为"区域复制"的功能。对于表的每个区域,可以在不同的区域服务器中打开多个副本。默认情况下,区域复制设置为1,因此仅部署单个区域副本,并且不会对原始模型进行任何更改。如果区域复制设置为2或更大,则主服务器分配表的区域的副本。负载均衡器确保区域副本不会同时托管在相同的区域服务器和相同的机架中(如果可能)。
若要启用,请在hbase-site.xml中设置hbase.region.replica.replication.enabled to true
。
创建地区高可用表:
CREATE 't1', 'f1', {REGION_REPLICATION => 2}
HBase为GET或SCAN操作提供一致性模型。
public enum Consistency {
STRONG,
TIMELINE
}
ConsistencySTRONG是HBase提供的默认一致性模型。如果表的区域复制=1,或者具有区域副本,但读取是在启用时间一致性的情况下完成的,则始终由主区域执行读取
查询次区域:
Get get = new Get(row);
get.setConsistency(CONSISTENCY.TIMELINE);
...
Result result = table.get(get);
用于扫描
scan 't1', {CONSISTENCY => 'TIMELINE'}
详情请参考this