您好,登錄后才能下訂單哦!
這篇文章主要介紹HBase 0.94中的Split策略有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
HBase 0.94之前版本中,split使用的是ConstantSizeRegionSplitPolicy。當region中文件大小超過配置中所指定大小時,會進行切分。
而在0.94版本之后,默認split策略修改為了IncreasingToUpperBoundRegionSplitPolicy。該策略使用了另一種方法來計算是否應當切割,導致原先的參數失效。
該方法中的分配策略,是根據table中region的個數平方,乘以memstore的大小。得出應當切分的大小。
假設memstore size配置為128M,則在memstore第一次刷入HFile數據時,進行第一次split,1 * 1 * 128M = 128M。
當region數達到2個時,2 * 2 * 128M = 512M。
當region數達到3個時,3 * 3 * 128M = 1152M。
依此類推。
當region個數到達30個時,30 * 30 * 128 = 107648M = 105.1G。即在此時,region的切分大小已經超過了我們原先在ConstantSizeRegionSplitPolicy策略中設置的100G大小。
對這種策略進行簡單的分析,可以看到,在數據寫入初期,這種策略可以快速的對現有region進行split,使得在一開始就可以將熱點region切分到多個server上。同時由于region size較小,也可以避免split操作對寫入的阻塞。
而在后期,當region數量逐漸增多,單個region size逐漸增大時,split頻率會急速減少,避免在region過大時頻繁split的情況。
這種策略一方面在數據量增大的情況下減少了region的切分次數,達到了我們期望的盡量減少split的需求,避免對寫入造成影響。同時在初期的快速切分,在基本不影響寫入的同時,也減少了我們原先需要手動操作split的問題。可以認為,這種策略是符合我們需求的。當然,還需要進一步的測試來進行驗證。
源碼如下:
/** * @return Region max size or <code>count of regions squared * flushsize, which ever is * smaller; guard against there being zero regions on this server. */ long getSizeToCheck(final int tableRegionsCount) { return tableRegionsCount == 0? getDesiredMaxFileSize(): Math.min(getDesiredMaxFileSize(), this.flushSize * (tableRegionsCount * tableRegionsCount)); } @Override protected boolean shouldSplit() { if (region.shouldForceSplit()) return true; boolean foundABigStore = false; // Get count of regions that have the same common table as this.region int tableRegionsCount = getCountOfCommonTableRegions(); // Get size to check long sizeToCheck = getSizeToCheck(tableRegionsCount); for (Store store : region.getStores().values()) { // If any of the stores is unable to split (eg they contain reference files) // then don't split if ((!store.canSplit())) { return false; } // Mark if any store is big enough long size = store.getSize(); if (size > sizeToCheck) { LOG.debug("ShouldSplit because " + store.getColumnFamilyName() + " size=" + size + ", sizeToCheck=" + sizeToCheck + ", regionsWithCommonTable=" + tableRegionsCount); foundABigStore = true; break; } } return foundABigStore; }
以上是“HBase 0.94中的Split策略有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。