對HBase區(qū)域數(shù)量的考慮
一般來說,HBase被設(shè)計為每臺服務(wù)器運(yùn)行一個較小的(20-200)數(shù)量相對較大的(5-20??Gb)區(qū)域。對此的考慮如下:
為什么我應(yīng)該保持我的區(qū)域數(shù)低?
通常情況下,由于多種原因,您希望在HBase上保持較低的區(qū)域。通常每個RegionServer大約有100個區(qū)域產(chǎn)生了最好的結(jié)果。以下是保持區(qū)域數(shù)低的一些原因:
- MSLAB(MemStore本地分配緩沖區(qū))需要每個MemStore 2MB(每個區(qū)域的每個家庭2MB)。1000個有兩個家族的區(qū)域使用了3.9GB的堆,甚至還沒有存儲數(shù)據(jù)。注意:2MB值是可配置的。
- 如果以相同的速率填充所有區(qū)域,則全局內(nèi)存使用情況會導(dǎo)致當(dāng)您的區(qū)域太多而又產(chǎn)生壓縮時,它會強(qiáng)制進(jìn)行微小刷新。重寫相同的數(shù)據(jù)幾十次是你想要的最后一件事。一個例子是平均填充1000個區(qū)域(有一個家族),讓我們考慮一下5GB的全局MemStore使用的下限(區(qū)域服務(wù)器會有一個大堆)。一旦它達(dá)到5GB,它將強(qiáng)制刷新最大的區(qū)域,那時它們應(yīng)該幾乎全部都有大約5MB的數(shù)據(jù),所以它會沖洗這個數(shù)量。稍后插入5MB,它將刷新另一個區(qū)域,該區(qū)域現(xiàn)在會有超過5MB的數(shù)據(jù),依此類推。目前這是地區(qū)數(shù)量的主要限制因素。
- 現(xiàn)在的主機(jī)對很多區(qū)域敏感,并且需要很多時間分配他們并分批移動他們。原因在于它對ZK的使用很重要,目前它不是非同步的(可以真正改進(jìn) - 在0.96 HBase中已經(jīng)有所改進(jìn))。
- 在較早版本的HBase(前HFile v2,0.90和之前的版本)中,少數(shù)RS上的大量區(qū)域會導(dǎo)致存儲文件索引上升,增加堆使用量,并可能在RS上創(chuàng)建內(nèi)存壓力或OOME。
另一個問題是區(qū)域數(shù)量對MapReduce作業(yè)的影響;每個HBase區(qū)域都有一個映射器是很典型的。因此,每個RS僅托管5個區(qū)域可能不足以獲得足夠數(shù)量的MapReduce作業(yè)任務(wù),而1000個區(qū)域?qū)⑸商嗟娜蝿?wù)。
更多建議: