我知道Hbase复制了WAL和Hfile,但所有这些都作为持久性存储在HDFS中。因此,Hbase还将提供区域级复制。我们知道区域包含BlockCache和MemCache,如果只有一个区域实例处理请求,Hbase如何解决热点请求。
另外,如果只有一个区域实例,Hbase将始终是一致的,对吗?因为所有的读者都只是从一个区域阅读,他们总是看到相同的数据?谢谢!
发布于 2016-01-31 01:11:13
最新版本的HBase有一个叫做“区域复制”的特性。
对于表的每个区域,可以在不同的区域服务器中打开多个副本。默认情况下,区域复制设置为1,因此只部署一个区域副本,并且与原始模型没有任何更改。如果区域复制设置为2或更多,则主服务器将分配表中区域的副本。负载均衡器确保区域副本不被共同托管在同一区域服务器中,并且在相同的机架中(如果可能的话)。
要启用,请在hbase-site.xml中设置hbase.region.replica.replication.enabled to true。
创建具有高可用性区域的表:
CREATE 't1', 'f1', {REGION_REPLICATION => 2}HBase为get或扫描操作提供了一致性模型。
public enum Consistency {
STRONG,
TIMELINE
}Consistency.STRONG是HBase提供的默认一致性模型。如果表具有区域复制= 1,或者具有区域副本,但读取是在启用时间一致性的情况下完成的,则读取始终由主区域执行。
查询次要区域:
Get get = new Get(row);
get.setConsistency(CONSISTENCY.TIMELINE);
...
Result result = table.get(get); 用于扫描
scan 't1', {CONSISTENCY => 'TIMELINE'}有关更多详细信息,请参阅这
https://stackoverflow.com/questions/35108526
复制相似问题