因為DataNode和RegionServer通常會部署在相同的機器上,所以會產(chǎn)生Locality這樣的概念。
HBase的Locality是通過HDFS的Block復制實現(xiàn)的旷痕。在復制Block時欺抗,HBase是這樣選擇副本的位置的:
第一個副本寫到本地節(jié)點上强重;
第二個副本寫到另一個機架的隨機節(jié)點上;
第三個副本寫到相同機架的一個隨機選擇的其他節(jié)點上报强;
如果還有更多的副本拱燃,這些副本將會寫到集群上的隨機節(jié)點上。
就是這樣召嘶,在flush或compact后弄跌,HBase的Region實現(xiàn)了Locality尝苇。
當一個RegionServer處在failover的情況下(rebalance或重啟)時,可能會分配到一些沒有本地StoreFiles的Region(因為此時沒有可用的本地副本)淳玩。然而非竿,有新數(shù)據(jù)再寫入這些Region的時候红柱,或者是對表進行compact的時候,StoreFiles將會被重寫韧骗,這些Region也會再次變成RegionServer的“l(fā)ocal”Region铁蹈。
有一個相關的指標“data locality”众眨,即Region保存在本地的StoreFile的百分比容诬。這個指標影響了major compact的執(zhí)行览徒。