2016-01-30 64 views
1

我知道Hbase具有WAL和Hfile的複製,但所有這些都作爲持久存儲在HDFS中。所以Hbase也會提供區域級副本。我們知道Region包含BlockCache和MemCache,如果只有一個Region實例處理請求,那麼Hbase如何解決熱點請求。Hbase是否具有區域複製

此外,如果只有一個區域實例,Hbase會始終如一,請嗎?因爲所有讀者只是從一個地區讀取,他們總是看到相同的數據?謝謝!

回答

3

HBase的最新版本有一個稱爲「區域複製」的功能。

對於表的每個區域,可以有多個副本在不同的區域服務器中打開。默認情況下,區域複製設置爲1,因此只部署單個區域副本,並且原始模型沒有任何更改。如果區域複製設置爲2或更多,則主服務器會分配表的區域副本。負載平衡器確保區域副本不共同託管在同一個區域服務器中,並且也位於同一機架中(如果可能)。

要啓用,請在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提供的默認一致性模型。

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

對於掃描

:如果表的區域複製= 1,或具有區域的副本,但讀取與時間一致性完成啓用,讀總是由主區域

查詢次級區域上執行

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

有關詳細信息,您可以參考this

+0

非常感謝您的詳細回答,一個問題請,如果我們設置I區域複製s 3,會影響Hbase的一致性嗎?我想在這種情況下,如果我們設置write_level = 1,除非設置write_level = 3,否則它不會是一致性系統。請好嗎?謝謝! – Jack

+1

次要區域複製是隻讀的。寫入,總是去主要地區。定期根據配置,HBase複製次要區域。有時候,次要地區的數據可能會過時。如果我們想要最新的數據,我們需要指定一致性級別爲STRONG。 – Ramana

+0

非常感謝,從負載均衡的角度來看,如果Hbase沒有區域複製,你認爲它的負載均衡性能比MongoDB還是Cassandra好,或者比它們差,欣賞! – Jack

相關問題