ααΆαα’αα»αααααααααααΊααΆαααααΌαααΆαααααΆαααα½ααα
αααααααΎααΆαααΆαα½ααα·ααααααααα αα
αααα»αααααααααα»ααα·αααααααα
Sberbank ααΎαααΌαααααα·ααααα·ααΆαααααΎαααααΆααα’ααα
αΌααα
αααα»α Data Cloud αααααΆαααΌαααααΆαααΎ Hadoop ααααααΎα α αΎαααΌα
αααααααααααΆαααΆαα½αααΉαααα αΌαααααααΆαααααα ααΆααααααΆαα· ααΎααααααααααααααααααααΆαααΎααααΈαααααα’ααΆαα’αα»αααα α αΎαα₯α‘αΌααααααΎαα
ααααααΆααα’αααααΈαααααααααΎααααααααααααΎααααΈαα½ααα»α RegionServer HBase αα·ααααΆαααΈαααααα HDFS α’ααα»ααααααΎαα’αΆα
αααααΎαααααΏαααααΆαα’αΆααααΆαααααΆααα
ααααααΆαααΆααααα αα»αααΉααααααα
α
ααα»α
ααααΆααααααΆααααααα’ ααΆααΆαααααααα·ααΆαα’αααΈααΆαααΉααααααΉα αααααΆααααααΆααααα·αα’αΆα
αααααΆα ααααα·αααΎα’αααα’αααα»αααΎ HDDα
α ααα»α’αααΈααΆαααΆ HDD αα·αααΆαα’αΆα Random Access ααΏααα·αααααααΆα
ααΌα
αααα’αααααΆαααΉαα αΎαααΆ HBase αα·αααΌαααααΆααα·ααααααααΆα
αααΎαααα αααααΆαα»ααα·αααααααα
αααα»ααααα»ααααααΆαααα αααΆαααα·αααΈα‘αΌααα ααΆαααααΆαααΎαααΆααΆααααα αα 64 KB α α₯α‘αΌααααααΌααααααααΆααΎαααααΌαααα½αααΆαααααΉααα 100 αα α αΎαααΎααα»αα±αα HBase αααααα±ααααΎαααΌααα·ααααααααααααααααΎααααΆααααΆααα αααααΆαααα ααααα»ααα
αααα»α HFiles ααΊ 64 KB ααααΎααΉαααΆαααα αααααΆα 640 αα (ααααΉααααα½αααΆααΈ!) ααΆαααΆαα
αΆαααΆα
αα
αααααΆαα α αΆααααΆααααΈααααΎααΉαααααααΆαα HDFS αα·αααααααΆααααα»ααα·ααααααααααΆααααααΆα ShortCircuitCache (αααα’αα»ααααΆαα±ααα αΌαααααΎα―αααΆααααααααΆαα) ααΆααΆααα αααααΆαα’αΆα 1 MB αα½α α αΎαααΈααΆαα αααααΆαααΆαααΆααααααααα’αΆα ααααΌαααΆααααααααΌαααΆαα½αααΉααααΆαααΆαααααα dfs.client.read.shortcircuit.buffer.size α αΎααααα»αααααΈααΆα αααΎαααΆααα ααα»αααααα»αααΆαααΆααααααααααααααα α§ααΆα ααααα 126 KB α
α§αααΆααΆααΎαααααΎαααααα ααα»ααααααΎαααΈααααα ααα αα ααααααααΎαα αΆααααααΎαα’αΆααα·ααααααααΆαααα java api ααΌα ααΆαα»αααΆαααΌα ααΆ FileChannel.read α αΎααα»αα±ααααααααααααααα·ααααα·ααΆαα’αΆαα ααα½ααα·αααααααααααΆααααααΆαα ααΆα’αΆα "ααααΆαααααααα»αααααΈ" 2 αααααααααααα , i.e. 256 KB αααα»αααααΈααααααΎαα αααααΊαααααΆααα java αα·αααΆααα·ααΈααΆααααα½ααααα»αααΆααααααααα FADV_RANDOM ααΎααααΈααΆαααΆαα₯αα·ααΆαααααα
ααΆαααααα ααΎααααΈααα½αααΆα 100 ααααααααΎα 2600 αααααααααΌαααΆαα’αΆααα ααααααααααΆααα ααΆα αΆααααΌα ααΆααΆαααααααααΆαααΊααΆααααααα α αΌαααΎαααΆαααααααααα ααααα»ααα ααΆααΈα‘αΌαα αααααααααααααΆααααααΆαα αα·αααα½αααΆαααΆααααααΏαααΆαααααΆααααΉαααα’ααα αΆαααα ααα»αααααααα αΆααΊααΆαααααΆαααααααααα ααααα»α 2 ααααΎαααααΆαααααααα ααα½ααααααα’αΆααααα»ααα½αα―αααΆαααααααααΆ 2 ααα
ααααΆααα αααααα½αα ααα½αααΈααΆααααααααα FADV_RANDOM α’αΆα ααα½αααΆα ααα»ααααααΆαααααΆαα½αααααα αααΎαααααα αα·αααα ααααα»α 128 KB ααα»αααααααααΊααΆα’αα·ααααΆααΈαααΈαααααΆαααα
ααΆαααααΎαααααααααΌαααΆαα’αα»ααααααΎα―αααΆα 100 αααααΈαα½ααααΆαααα α 1 GB αα·αααΆαααΈααΆαααα
ααΎ HDD α
ααα½α 10 α
α
αΌαααΎαααααΆα’αααΈαααααΎαα’αΆα
ααααΎααΆα ααΆαααααΆααα ααΉαααα’ααααΎααααΏααααα
α§αααΆααΆααΎαα’αΆαααΈ 10 ααΆααααα»αααααΏα 280 MB/sec, i.e. 3 ααΆααα 100 ααα ααα»ααααααΌα
αααααΎαα
αα
αΆα αα·αααααααααααΎαααααΌαααΆαααΊ 2600 αααα·α
ααΆαα’αααΈαααααΆαα’αΆαα ααΌα
ααααααΎααααα
αα 3 ααΆαααα 2600 α αΎαααα½αααΆα 1100 αααααααααΆαααα»ααα½ααα·ααΆααΈα
ααΆααααΉαα α·αααααααα? αααααΆααααααΆαα· ααΆαα αΌαααααΎαααα ααααα ααΆαα αΌαααααΎαα·αααααααα ααΎ HDD - ααααα·ααα·αααΈααα ααααα»αα αααααΊααΆααααααααααΆαααααααααααΆαα αΌαααααΎαααα ααααα α αΎαααααΆαααΌαααααΆααα·ααααααααΆαα½αα’αΆα α ααααΆα αα ααααααααααααα αααααααααααααααααααααα
ααΌα ααααααΎ Databases ααα½αααΆαααααΏααααααααΆαααααααααααααΆ? ααΎααααΈβααααΎαβααΉαβαααα½αβααα ααΌαβααΎαβααΆβααΆαβα’αααΈβααΎαβα‘αΎαβαααα»αβααΌαααΆαβααΆαβαααααα
αα
ααΈαααααΎαααΎαααΆαααααΆααααα»ααααΆαααΆααΈααααΌα ααααΏααα·αααΆαααα αααα½αααΆαααααααααααΆαααα»ααα½ααα·ααΆααΈα ααααααΆαααΆαααααααααααααααααααΆαααααΆααα·ααααααΆααααΌαααΆαα’αΆαα
αααΎαααΆαααΆαααααΎαα»ααα·αααααααααα
αααα
αααα»α buff / cache ααααααααααααααα·ααααα·ααΆα (linux) α αΎαααααΏαααΎαα‘αΎααααααααααααΆα 60 ααΆαααααα»ααα½ααα·ααΆααΈα
ααΌα αααα ααΎαααΉααααααααΆαααΆαα½αααΆααααααΎαααααΏαα αΌαααααΎαααα·αααααααααααΆααα αααα»αααααΆαααααααΆαα OS α¬αααα·ααα αααα»αα§ααααααααα»α SSD/NVMe ααααααΏαα αΌαααααΎαααΆααααα’αΆα ααααααααααΆαα
αααα»αααααΈααααααΎα ααΎαααΉαααααΎααΆαααΆαααααααΎαααΆαααΈαααα ααα½α 4 αααααΈαα½ααααααΌαααΆααα·αααααΆααααΌα ααΆααααααα
αααΈααΈααΌα Xeon E5-2680 v4 @ 2.40GHz 64 ααααα
α’αααα
αα
αΆαα α§α£α ααΈααΆααα
αααα javaα 1.8.0_111
α αΎααα ααΈαααα ααα»α ααααΆααααΊα ααα½ααα·αααααααα αααα»αααΆααΆααααααααΌαα’αΆαα ααΆααα·αααΊααΆααααα·αααΎα’αααα’αΆααα·ααααααααΈααΆααΆααααααααΌαααΆαααΆααααΆαααααα»ααα αααα»αααααΆαααααααΆαα HBase αααααΆααΉααα·αααα’αΆαααΈ buff/cache ααααααααααααααααα·ααααα·ααΆααααααα αααααΆααα HBase ααΆαααααΆαααΎααααα αα 40% ααα’αααα αα αΆααα αα ααΆααααααααα α ααΆ BlockCache α ααααΆαααααααΊααΆ ConcurrentHashMap αααααΌαααααΊααΆαααααα―αααΆα + α’α»α αααα·ααααααα»α α αΎααααααααΊααΆαα·αααααααα·αααααΆαααα α’α»α αααα·ααααα
ααΌα
αααααα
αααα’αΆαααααΈαα
ααΆαααααααααααααΎα
α§ααΆα ααααααα»αααααΈααααααΎαααα·ααΆα BlockCache αα ααΎ RS αα½αααΊαααα αα 12 GB α ααΎαααΆαα α»αα α RS ααΈααα ααΎααααΆαααα½α, i.e. 96 GB ααααΌαααΆαααααα»ααα»ααααααΆαα BlockCache αα ααΎααααΆααααΆααα’ααα α αΎαβααΆαβαα·ααααααβα αααΎαβααβααα α§ααΆα ααα αα»αβααΆβααΆ 4 ααΆααΆα 130 αααααβααΈαα½αα αααβα―αααΆαβααΆαβααα α 800 MB ααααα½αβααα FAST_DIFF i.e. ααα»α 410 GB (αααααΊααΆαα·αααααααα»ααα αααααΊααααα·ααα·αααΈαααααΆα αααα)α
ααΌα αααα BlockCache ααΆαααααΉααααααα αα 23% ααααα·ααΆααα·ααααααααα»α α αΎααααααΊααΆαααααα·ααα αα·ααααααααααα·αααα’αααΈαααα α ααΆ BigData α α αΎααααααΊααΆαααααααααααΆααααααΆαααΈαααΆαα αΆααααααΎα - αααααΆαααααΆααααααα ααΆαα αΌαααΎαααααΆαααααααΆαααα·α ααΆααα»α ααΆαααααααααΆααααα’αΆαααααα αααΆαααΆαα·αααααα·αααΎα’αααααΉαα’αααααΉαααααΌαααααΎααΆαααΆαααΆα αααΎα - i.e. α α»ααα αα»αααΆαααααααααα α ααΌαααααα αααααΆαααΆαααΆααααα ααααα·αα’αΆα αααααΆαααΆααα ααΌα ααααααΌααααα‘ααααΎααα·αααααΆααα»αααααΆααΆαααααα»α - ααΎααΆαα’αααΈααΎαα‘αΎαα αααααα·αααααααα αααα»αααααΆαααααααΆαα?
α αΌαααααΎα±ααααααΆαααΆαααΆααααα½α α αΎααααααααΆααΎαααΆαααααΆαααααααΆαααααααααΉαααααα» 1 ααα»αααααα αααααΊααΆα§ααΆα αααααα’αααΈαααααΉαααΎαα‘αΎααα ααααααααΎαααααΆααΆαααααΎααΆαααΆαα½αααα ααα·ααααααααααΆαααααΆαααααααΆαα 3 αα ααΎαααΉαααααΌαα
1. ααΆαααααα»α 1 αααα»αααααΆαααααααΆαα
2. αααααα»α 1 α
ααααΈααααΆαααααααΆαα
3. ααΆαααααα»α 2 αααα»αααααΆαααααααΆαα
4. αααααα»α 2 α
ααααΈααααΆαααααααΆαα
5. ααΆαααααα»α 3 αααα»αααααΆαααααααΆαα
αααααααΆαβααΆααβα₯βααααΌαβααΆαβαααα αα! αααααΆαααΆαααΆααααα ααααΆαααΆαααααα·αα’αΆα ααααΌαααΆαααα α ααΆααααααΆαα ααΆααα·αααΎααααα»ααααααα±αα HBase ααααΎααΆαααΆααααααααΆαααααααααααΆαααααα»αα ααΆα’αΆααα·ααααααα₯ααααααααΈααααΆαααααααΆαα OS ααΆααααΆαα αααα»α BlockCache ααααΆαααααααααΆα ααααααΎαααααααΆαααααααΆααααααααααααΈαααα·ααααααααΆααααααα ααααΌαααΈαα ααα ααΎαααααΆααααα αααααα αΆαααΈααααΉαααΆααααααα αΆ - α’ααααααααΌαααααΆααααα»ααα·αααα α ααα·ααΆααΆααααα»αα‘αΎααααα α αααααααΆαα·α αα½α αα ααααΆα αα·ααααα ααα»αα’αααααα»αααΌα α α·αααα α αΎαβααΎαβααΆβααα»αααβα’αΆαααΈβαα·αβααΆβαα·αβα αΌαβα α·αααβααΆβαα βαααβαααβαα»ααΆαβαααβααααΆα ααΌα ααααβααΎαβα αΆααβααααΎαβαα·αβα’αααΈβα’αααΈβαααβααΎαβα’αΆα βααααΎβααΆαβα’αααΈβααΆα
α α»αααΎα’ααααα·αααΆαααααα»αααΆααα’αααα αααα»αααααΆαααααααΆαααα ααα»ααααααΆαααααΆαααααΆααααΆαααααα½αααΆ ααΌα ααααααααΆαααααααΆαααα·αα ααα αα? α αΌαα αΆααααααΎααααααααΆααααααααααααΌαααΈαααΈαααααΆαααα ααΆαα αΆααααααΎααααα»αααΆααααααΆααααΆαααα·αααααααα αααα»α BlockCacheα
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
if (cacheDataBlockPercent != 100 && buf.getBlockType().isData()) {
if (cacheKey.getOffset() % 100 >= cacheDataBlockPercent) {
return;
}
}
...
α ααα»α αα ααΈαααααΊααΌα ααΆααααααα α’α»α αααα·αααΊααΆααΈααΆαααααααα»ααα αααα»αα―αααΆα α αΎααααααα α»ααααααααααααΆααααΌαααΆαα ααα αΆααααα ααααα αα·αααααΎαααααΆααΈ 00 ααα 99α ααΌα ααααα αΎα ααΎαααΉαααααααα’ααααααααααΆααα αΌααα αααα»ααα½ααααααΎαααααΌαααΆαααα»αααααα
α§ααΆα ααα ααααα cacheDataBlockPercent = 20 α αΎαααΎαααΆααΆαα’αααΈααΎαα‘αΎαα
ααααααααΊααΆαααααααα αα
αααα»αααααΆα ααααΆαααααα ααΆα
αααΆααααΆααααΆα ααα»α’αααΈααΆαααΆααΆααααααΎαααααΏαααααααααΎαα‘αΎα - ααΎααααααΆαα»αααααΆα GC ααΆα
αααΎαααααα·αααααΎααΆαααΆααααα Sisyphean αααα»αααΆαααΆαααα·αααααααααα»αααααΆαααααααΆααααΎααααΈαααααΆα
ααααααΆαααα
ααΎαααααααα Martianα
αααα»ααααααΆαα½αααααΆααα ααΆαααααΎααααΆαα CPU ααΎαα‘αΎα ααα»αααααα·α
ααΆαααα·αααΆαα
αααΎαα
ααΆαααα½αα’αααααααααΆαααααααααΆαααα»αααααααα»ααα
αααα»α BlockCache ααΊαα»αααααΆα ααΆαα
αααΎααααα αα 95% ααΊααΆαα·αααααααααα½αα―αα α αΎααα
αααααΊααΆαα·ααααααααααΆ ααΌα
ααΆααααα Bloom α¬ LEAF_INDEX αα·α
ααΌα αααααα αααα»αααΌαααΎαααΎααααααααααααα½ααα·αα·ααα buf.getBlockType().isData() α αΎαα’ααα»αα ααααααααΆααα ααΎαααΉααα»αααΆαα αααα»αααααΆαααααααΆαααααα»αααααΈααΆαααααα
α₯α‘αΌαααα α αΌααααααΎαααΆααααα»α αα·αααΉααααααΉααα»αααΆααααααααα·α αααα»ααα½αααΎαα αα αααα»αααΆαααααΎαααααααααΌα ααΎαααΆαααααΎα±ααααΆαααααααΆαααΆααα αα = 20 α αΎα BlockCache ααααΌαααΆαααααααΎααααΆαααα·α αα½α α α₯α‘αΌαβααΎαβαααααβααΆβαα 23% α αΎαβαααααα 100 ααααβααΆαα 5 ααΆααΈβαααα ααΎααααΈβααΎαβααΆβααΎβα ααα»α βααα’ααβα’αααΈβααΎαβα‘αΎαα
αα
ααΈαααααΎαααΎαααΆααααααΎαααααΎαααααααΆααααΆαααααα·ααΆααααα αα 100 ααΆααααααΎαααα»ααα½ααα·ααΆααΈα ααααααααααααααααααααΌαααΆααααααΎαααααΏααα αΌαααα 300 ααΆααα αααα»ααααααΆαα½αααααΆααα ααΆα
αααΆααααΆααααΆααΆααααααΎαααααΏααααααααααααΊααα "α₯ααα·ααααα" αααα αΎα ααΆαααααΎααααΆαααααΈααΈααΌααααΎαα‘αΎααααααα
αααααΆαααΆαααΆααααα ααααα·ααααααΆαααααααααΆαααααααα·αααααα αααααΆαααΎααα·αααΉαααΆαα»αααΆααΎααΆααααααααα»αααααΌαααΆαααααα»αααααΆαααααααΆααα’αααΈαααα ααΆα’αΆαααααααΎαααααααααα»αα ααΌα ααααααααααΆααα½αααααΌαααΆαα’αα»ααααααΎααααΈαααααααΌααααΆαααΆααααααααααααααααααααααααα·α’αΆαααααααΎαααααααΆαααααααα·ααααα·ααΆαα’αΆαα
αααααΎαααΈααααΌαααΆαααααααααΎααααΈαααααααααααΆα
hbase.lru.cache.heavy.eviction.count.limit β αααααα ααα½ααααααααααΎαααΆαααααΆααααααααα·ααααααα ααααΈααααΆαααααααΆαααα½αααααααΎαααΆα αα»ααααααΎαα αΆααααααΎαααααΎααΆααααααΎαααααα·αααααΆα (α§. αααααααα»α)α ααΆαααααΆαααΎα ααΆααααΎααΉα MAX_INT = 2147483647 α αΎαααΆααα·αααΆααααααΆαα»αααΆααααααΉααα·αα αΆααααααΎαααααΎαααΆαααΆαα½αααααααααααα αααααΆαααααααΎαααΆαααααΆαααααααα ααα αΆααααααΎααααααΆαα 5 - 10 αα·ααΆααΈ (ααΆα’αΆαααααααΎααααα»α) αα·α 2147483647 * 10 / 60 / 60 / 24 / 365 = 680 ααααΆαα ααααααΆαααΆααααα ααΎαα’αΆα ααααααααΆαααΆααααααααααα ααΆ 0 αα·αααααΎα±αααα»αααΆααααααααΎαααΆαααααΆαααααααΆααααΈααΆαααΎαααααΎαααΆαα
ααααααΆαααΆαααααααααΆα payload αα αααα»ααααΆαααΆααααααααααααααα ααααα·αααΎααααα»αααααααΎαααΊααΌα ααΆααΆαα’αΆαααααααααααΈ (αα·ααΆααααα»αα’αα‘α»αααααααα) αα·αααΆαα’αΆαααααααααα (αα αααααα) ααααΌαααΆαααΆααααα αΌαααααΆα₯αααααα αααααΎαα’αΆα ααααΆααααΆαα»αααΆααααααααΌαααΆαααΎααααα ααααααααααα·ααααα·ααΆαα’αΆαααααααα»αααααΎαααΆαα
ααΆα§ααΆα ααα ααΎαααΉαααΆααΆαα’αΆαααααααααααΈααΆααααααΆααΆααααααααααα αα 1 ααΆααΈα αα·αα αΆαααΆα αα αΆααααααΎααααα αααααα»ααα ααααΆαααααααΆααααΉααα·αααΆααααααααΆααΎααααΈααααΆαααΆα α½ααααααα α αΎααααααΆααααααΎαα’αΆα ααααααααΆαααΆαααααααααααααΎααΉαα§ααΆα ααα 10. αααααΉαααΆαα±ααααΆααα·ααααααΆααΆααααααΎαααααα·αααααΆαααΉαα αΆααααααΎαααααΎαααΆααααα ααααααααααααααΌα - ααΆαβα’αΆαβαααααβααΆαααβααΆαβα αΆααβααααΎβα, i.e. αααα»α 100 αα·ααΆααΈα ααΌα ααααααααα·αααΎααΎαα’αΆαααααααααααΈ ααααααα»αααΆααα’ααααΉαα αΌααα αααα»αααααΆαααααααΆαα α αΎαααΉαααΆα (ααΎααααααα’ααααααααΉαααααΌαααΆαααααααα ααααααααα½ααααααααΆααααααααΆα)α α αΎααα ααααααααΎαα’αΆαααααααααα αα»αααΆααααααααΌαααΆαααΎα α αΎαααΎαααΉαααΆαααααΎαααΆααααααααΆαα αααΎαα
hbase.lru.cache.heavy.eviction.mb.size.limit - αααααα ααα½αααααΆαααααααΎαα ααααΆαααααα»αααααΆαααααααΆαα (α αΎαααΆααΆααα·α ααααααα αα) αααα»ααααααα 10 αα·ααΆααΈα αα»αααΆααααααΉαααααΆααΆαααΆααααααααααααα αΎααααααΆααΆα α ααα»α ααΊαααα ααααα·αααΎααΎααα»αααΈα αααΆαααα αααα»αααααΆαααααααΆαα αααααΎαααΉαααααΌαααααααα αα ααΈα αααΆαα α αΎααααααΌα αααααΎαααΆαααΎαααΆαααΎ ααΊααΆααααααααααααΆααα αααααΆαααΆαααΆααααα α’ααααα·ααα½αααααΆααΆααααααααΆα±ααααΌα ααααα αααααααΆααΉαααααΎα±αααααααααααααα»αα αααα»αα’αΆαα»α αααααΆαααααΆαααΈααααααααΆαααΆααα (αααα αα 20-40 ααααΌαααΆαααΆα) ααΆααα’αααα»ααααα»αααΆαααααααααα αα 300-400 ααααΆααα αααααΆααααααΆαααααααΆα (~10 cores) 200-300 MB α αααααΆααααααααααααααα (2-5 cores) 50-100 MB α’αΆα ααΆααΏαααααααΆ (αα·αααααΌαααΆαααΆαααααααΎααΆααααααα)α
ααΌααααα‘ααααΎααααααααααΆααααΎαααΆαα α§αααΆααΆααΎαααααα hbase.lru.cache.heavy.eviction.mb.size.limit = 500 ααΆααΆαααααααααααΆααααα»α (α’αΆα) α αΎααααααΆαααααααααΆαα ~ 10 αα·ααΆααΈααΎαααααΆα ααα½αααα ααααααα αααααααααΎααΌαααααα
ααΎα = Freed Bytes Sum (MB) * 100 / Limit (MB) - 100;
ααααα·αααΎααΆααα·α 2000 MB ααααΌαααΆαααααααα αα ααα Overhead ααΊααααΎααΉαα
2000 * 100 / 500 - 100 = 300%
αααα½ααααααααΆαααααΆααΆααααααΆαα·αααΎαααΈααΈαααΈαααααΆααα ααΌα αααααααααααα·αααααΉαααΆαααααααααΆααααααααα»ααααααΆααααααΆαα»α αααα ααα»αααα’αα»ααααααααααΆααααααααΌααααααααααααααααα·α
ααααααΆαααΆααααα ααααα·αααΎααΆααααα»αααααΆααα α»α α§αααΆααΆααΆααα 200 MB ααα»ααααααααααααΌαααΆαααααααα αα α αΎα Overhead ααααΆαααΆα’αα·αααααΆα (α α ααΆααΆαααΎααααααα):
200 * 100 / 500 - 100 = -60%
αααα»ααα αα·α αα»αααΆααααααΉααααααΎαααΆααααααααα»αααααΆαααααααΆαααα αΌαααα Overhead ααααΆαααΆαα·αααααΆαα
ααΆαααααααααααΊααΆα§ααΆα ααααααααααααααΆααΎααα ααΎαα·αααααααα·αα αα·αα αΆαααΆα αααααΆααΆαααΆαααα 0% ααΆαα·αα’αΆα αα αα½α ααα ααΆααα’ααΆαααα ααααααααΆααΆααααα αα 30 - 100% ααΆαα½ααααααΆαααΆαα αΆαα αααα»αα’αΆαα»ααΈαααααααααΎαααααα·αααααΆαα’αα‘α»ααααααΆαααΆαααΎαα‘αΎαααααααααααΈα
hbase.lru.cache.heavy.eviction.overhead.coefficient β αααααααΆααΎααΎαα ααααα½αααΆαααααααααΏαααα»ααααΆα ααααα·αααΎααΎαααΉαα αααΆααααΆααΆαα’αΆαααααααΎαααΆαα αααΎαααα α αΎααα·αα αααααα αΆα ααΎαα’αΆα αααααΎααααΆααΆαααααα αα·αααα½αααΆαααααα·αααααΆααααααααΏαααΆααα»αα
α§ααΆα αααααΎαααααααααα»αααα = 0.01 α αααααΆααααααΆ Overhead (ααΌαααΎαααΆαααΎ) ααΉαααααΌαααΆααα»ααααααααααααααααααααααααα α αΎαααΆααααααααα»ααααααΆααααααΆαα»αααΉαααααΌαααΆαααΆαααααααα α αΌααααααααΆ Overhead = 300% αα·ααααα»α = 0.01 αααααΆααααααΆααααααααα»αααααΆαααααααΆααααΉαααααΌαααΆαααΆααααααα 3% α
αααααα·ααααΆ "Backpressure" ααααααααααΆαααααααααΌαααΆαα’αα»αααααααααΆαααααααα’αα·αααααΆα (ααΆαααΎαα ααα»α) αααααα αααααΆαααΆααααααααα½αααααααααααΈααααα·ααΆαα’αΆα αα·αααΆαααααααα ααααΊαααααα’αΆα ααααΎαα ααΆα ααααααΆααααα’αα»ααααΆαα±ααα’ααααααααΆαααΆαα αΆαα αααα»αα’αΆαα»ααΈαααααααααΎαααααα·αααααΆαα Backpressure ααΆααααααα·ααααΆαααα αααΆαα ααΆαααΆααα»αααΆααααααααΆαα αααα»αααΆααααα αααΎαααααΌαααΆααα»ααααα»αααααΆαααααααΆααα
αααααΌαα’αα»αααα
LruBlockCache cache = this.cache.get();
if (cache == null) {
break;
}
freedSumMb += cache.evict()/1024/1024;
/*
* Sometimes we are reading more data than can fit into BlockCache
* and it is the cause a high rate of evictions.
* This in turn leads to heavy Garbage Collector works.
* So a lot of blocks put into BlockCache but never read,
* but spending a lot of CPU resources.
* Here we will analyze how many bytes were freed and decide
* decide whether the time has come to reduce amount of caching blocks.
* It help avoid put too many blocks into BlockCache
* when evict() works very active and save CPU for other jobs.
* More delails: https://issues.apache.org/jira/browse/HBASE-23887
*/
// First of all we have to control how much time
// has passed since previuos evict() was launched
// This is should be almost the same time (+/- 10s)
// because we get comparable volumes of freed bytes each time.
// 10s because this is default period to run evict() (see above this.wait)
long stopTime = System.currentTimeMillis();
if ((stopTime - startTime) > 1000 * 10 - 1) {
// Here we have to calc what situation we have got.
// We have the limit "hbase.lru.cache.heavy.eviction.bytes.size.limit"
// and can calculte overhead on it.
// We will use this information to decide,
// how to change percent of caching blocks.
freedDataOverheadPercent =
(int) (freedSumMb * 100 / cache.heavyEvictionMbSizeLimit) - 100;
if (freedSumMb > cache.heavyEvictionMbSizeLimit) {
// Now we are in the situation when we are above the limit
// But maybe we are going to ignore it because it will end quite soon
heavyEvictionCount++;
if (heavyEvictionCount > cache.heavyEvictionCountLimit) {
// It is going for a long time and we have to reduce of caching
// blocks now. So we calculate here how many blocks we want to skip.
// It depends on:
// 1. Overhead - if overhead is big we could more aggressive
// reducing amount of caching blocks.
// 2. How fast we want to get the result. If we know that our
// heavy reading for a long time, we don't want to wait and can
// increase the coefficient and get good performance quite soon.
// But if we don't sure we can do it slowly and it could prevent
// premature exit from this mode. So, when the coefficient is
// higher we can get better performance when heavy reading is stable.
// But when reading is changing we can adjust to it and set
// the coefficient to lower value.
int change =
(int) (freedDataOverheadPercent * cache.heavyEvictionOverheadCoefficient);
// But practice shows that 15% of reducing is quite enough.
// We are not greedy (it could lead to premature exit).
change = Math.min(15, change);
change = Math.max(0, change); // I think it will never happen but check for sure
// So this is the key point, here we are reducing % of caching blocks
cache.cacheDataBlockPercent -= change;
// If we go down too deep we have to stop here, 1% any way should be.
cache.cacheDataBlockPercent = Math.max(1, cache.cacheDataBlockPercent);
}
} else {
// Well, we have got overshooting.
// Mayby it is just short-term fluctuation and we can stay in this mode.
// It help avoid permature exit during short-term fluctuation.
// If overshooting less than 90%, we will try to increase the percent of
// caching blocks and hope it is enough.
if (freedSumMb >= cache.heavyEvictionMbSizeLimit * 0.1) {
// Simple logic: more overshooting - more caching blocks (backpressure)
int change = (int) (-freedDataOverheadPercent * 0.1 + 1);
cache.cacheDataBlockPercent += change;
// But it can't be more then 100%, so check it.
cache.cacheDataBlockPercent = Math.min(100, cache.cacheDataBlockPercent);
} else {
// Looks like heavy reading is over.
// Just exit form this mode.
heavyEvictionCount = 0;
cache.cacheDataBlockPercent = 100;
}
}
LOG.info("BlockCache evicted (MB): {}, overhead (%): {}, " +
"heavy eviction counter: {}, " +
"current caching DataBlock (%): {}",
freedSumMb, freedDataOverheadPercent,
heavyEvictionCount, cache.cacheDataBlockPercent);
freedSumMb = 0;
startTime = stopTime;
}
α₯α‘αΌαααα ααΌααααα‘ααααΎαααΆααα’ααααααααααααΎα§ααΆα αααααΆαααααααα ααΎαααΆαααααααΈαααΆαααααααΆααααααα
- αααα αΆααααααΎα Scan (25 threads, batch=100)
- αααααΆααααΈ 5 ααΆααΈααααααααΆαααα½αααΆαα αααΎα (25 αααααααα‘αΆα, ααΆα α = 100)
- αααααΆααααΈ 5 ααΆααΈ ααΌααα·αααΆαααα½αα αααΎα (αα ααααααααααααααααα)
ααΎαααααΎααΆααααααΈα ααΈαα½α hbase.lru.cache.heavy.eviction.count.limit = 10000 (ααααα·αααΆαα·ααα»αααΆα) α αΎααααααΆααααααααα limit = 0 (ααΎαααααΎαααΆαααΆ)α
αα αααα»ααααααα ααα»ααΆαααααα ααΎαααΎαααΈααααααααα»αααΆαααααΌαααΆαααΎα α αΎααααααααΆα Overshooting α‘αΎααα·ααα 14-71%α ααΌαααααα ααααα»αααα α»α αααααΎα Backpressure α αΎα HBase αααα»ααααα»αααααααααααααααααα
Log RegionServer
ααααααα
αα (MB): 0, αααΆααΆααα 0.0, ααΎα (%): -100, αααααααΆαααααααα
ααααααα: 0, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 100
ααααααα
αα (MB): 0, αααΆααΆααα 0.0, ααΎα (%): -100, αααααααΆαααααααα
ααααααα: 0, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 100
ααααααα
αα (MB): 2170, αααΆααΆααα 1.09, ααΎα (%): 985, αααααααΆαααααααα
ααααααα: 1, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 91 < α
αΆααααααΎα
ααααααα
αα (MB): 3763, αααΆααΆααα 1.08, ααΎα (%): 1781, αααααααΆαααααααα
ααααααα: 2, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 76
ααααααα
αα (MB): 3306, αααΆααΆααα 1.07, ααΎα (%): 1553, αααααααΆαααααααα
ααααααα: 3, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 61
ααααααα
αα (MB): 2508, αααΆααΆααα 1.06, ααΎα (%): 1154, αααααααΆαααααααα
ααααααα: 4, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 50
ααααααα
αα (MB): 1824, αααΆααΆααα 1.04, ααΎα (%): 812, αααααααΆαααααααα
ααααααα: 5, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 42
ααααααα
αα (MB): 1482, αααΆααΆααα 1.03, ααΎα (%): 641, αααααααΆαααααααα
ααααααα: 6, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 36
ααααααα
αα (MB): 1140, αααΆααΆααα 1.01, ααΎα (%): 470, αααααααΆαααααααα
ααααααα: 7, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 32
ααααααα
αα (MB): 913, αααΆααΆααα 1.0, ααΎα (%): 356, αααααααΆαααααααα
ααααααα: 8, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 29
ααααααα
αα (MB): 912, αααΆααΆααα 0.89, ααΎα (%): 356, αααααααΆαααααααα
ααααααα: 9, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 26
ααααααα
αα (MB): 684, αααΆααΆααα 0.76, ααΎα (%): 242, αααααααΆαααααααα
ααααααα: 10, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 24
ααααααα
αα (MB): 684, αααΆααΆααα 0.61, ααΎα (%): 242, αααααααΆαααααααα
ααααααα: 11, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 456, αααΆααΆααα 0.51, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 12, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 21
ααααααα
αα (MB): 456, αααΆααΆααα 0.42, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 13, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 20
ααααααα
αα (MB): 456, αααΆααΆααα 0.33, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 14, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 15, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 342, αααΆααΆααα 0.32, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 16, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 342, αααΆααΆααα 0.31, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 17, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.3, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 18, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.29, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 19, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.27, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 20, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.25, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 21, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.24, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 22, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.22, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 23, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.21, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 24, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.2, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 25, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 228, αααΆααΆααα 0.17, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 26, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 456, αααΆααΆααα 0.17, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 27, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18 < ααΆαααααααααα½αααΆα (ααα»ααααααΆααΆαααΌα
ααααΆ)
ααααααα
αα (MB): 456, αααΆααΆααα 0.15, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 28, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 342, αααΆααΆααα 0.13, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 29, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 342, αααΆααΆααα 0.11, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 30, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 342, αααΆααΆααα 0.09, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 31, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.08, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 32, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.07, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 33, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.06, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 34, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.05, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 35, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.05, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 36, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 228, αααΆααΆααα 0.04, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 37, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 109, αααΆααΆααα 0.04, ααΎα (%): -46, αααααααΆαααααααα
ααααααα: 37, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22 < αααααΆαααΆαααααα
ααααααα
αα (MB): 798, αααΆααΆααα 0.24, ααΎα (%): 299, αααααααΆαααααααα
ααααααα: 38, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 20
ααααααα
αα (MB): 798, αααΆααΆααα 0.29, ααΎα (%): 299, αααααααΆαααααααα
ααααααα: 39, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 570, αααΆααΆααα 0.27, ααΎα (%): 185, αααααααΆαααααααα
ααααααα: 40, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 17
ααααααα
αα (MB): 456, αααΆααΆααα 0.22, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 41, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 342, αααΆααΆααα 0.16, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 42, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 342, αααΆααΆααα 0.11, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 43, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 228, αααΆααΆααα 0.09, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 44, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 228, αααΆααΆααα 0.07, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 45, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 228, αααΆααΆααα 0.05, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 46, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 222, αααΆααΆααα 0.04, ααΎα (%): 11, αααααααΆαααααααα
ααααααα: 47, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 16
ααααααα
αα (MB): 104, αααΆααΆααα 0.03, ααΎα (%): -48, αααααααΆαααααααα
ααααααα: 47, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 21 < ααΆαααααΆαααα½αααΆα
ααααααα
αα (MB): 684, αααΆααΆααα 0.2, ααΎα (%): 242, αααααααΆαααααααα
ααααααα: 48, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 19
ααααααα
αα (MB): 570, αααΆααΆααα 0.23, ααΎα (%): 185, αααααααΆαααααααα
ααααααα: 49, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 342, αααΆααΆααα 0.22, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 50, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 228, αααΆααΆααα 0.21, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 51, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 228, αααΆααΆααα 0.2, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 52, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 228, αααΆααΆααα 0.18, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 53, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 228, αααΆααΆααα 0.16, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 54, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 228, αααΆααΆααα 0.14, ααΎα (%): 14, αααααααΆαααααααα
ααααααα: 55, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 18
ααααααα
αα (MB): 112, αααΆααΆααα 0.14, ααΎα (%): -44, αααααααΆαααααααα
ααααααα: 55, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 23 < αααααΆαααΆαααααα
ααααααα
αα (MB): 456, αααΆααΆααα 0.26, ααΎα (%): 128, αααααααΆαααααααα
ααααααα: 56, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.31, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 57, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 58, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 59, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 60, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 61, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 62, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 63, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.32, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 64, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 65, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 66, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.32, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 67, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 68, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.32, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 69, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.32, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 70, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 71, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 72, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 73, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 74, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 75, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 342, αααΆααΆααα 0.33, ααΎα (%): 71, αααααααΆαααααααα
ααααααα: 76, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 22
ααααααα
αα (MB): 21, αααΆααΆααα 0.33, ααΎα (%): -90, αααααααΆαααααααα
ααααααα: 76, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 32
ααααααα
αα (MB): 0, αααΆααΆααα 0.0, ααΎα (%): -100, αααααααΆαααααααα
ααααααα: 0, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 100
ααααααα
αα (MB): 0, αααΆααΆααα 0.0, ααΎα (%): -100, αααααααΆαααααααα
ααααααα: 0, ααααΆαααααααΆαααα
αα
α»αααααα DataBlock (%): 100
ααΆααααααααΊα αΆαααΆα αααΎααααΈαααα αΆαααααΎαααΆαααΌα ααααΆαααα»αααααααααΆααααΆα ααααααααΆαααααααααΆααααααααααΆαααααααΆααααΈα - αααα½α (ααααααα»αααααα·αααααΆααααααΌαααΆαααααΎαα»αααΈαα»α) αα·αα αααΎα (αα·αααααα "ααΆαααααΎαα»α" αααΆαα αα ααΆααααααααααΌαααΆααααααΆαα»ααα ααΈααα)α
α αΎαα
α»αααααα ααΎααααα·ααααα·ααΆααααααΆαααΆααααααααΎααα
ααΌα
α’αααΈαααα»αααααααααααΆα ααα αααααΆααααΆααααααααα ααααΆαααααααΆααααααΌαααΆααα·αααΆαααααα»ααα
ααΎαααααΌα αααααΆαααα HBase ααααΌαααΆαααΎαααααΎαααΆαααΆαα½αααααΆαααααααΆαα αα·ααααααΆαααααΆαα
αΆααααααΎαααΆαααΆααααααΎαααααα·αααααΆαααααΉα 5 ααΆααΈ (30 ααααααααΆαααααααα
αα) α
ααΌαααααααα’αΆα
ααααΆααα
αααα»α Pull Request
αααααΆαααΆαααΆααααα 300 α’αΆααααα»ααα½ααα·ααΆααΈ αα·αααααα»αααααα’αΆα αααααα ααΆααα ααΎαααααααΉαααααααααααααααααααΆααααααααααα ααΆααα·αααΊααΆαα ααααααα’αααααααΌαααΆαα αΌαααααΎαα·ααααααααΆαααα HDFS ααααααΆα ShortCircuitCache (ααα αααα α ααΆ SSC) ααααΌαααΆαααααΎ αααα’αα»ααααΆαα±ααα’αααα αΌαααααΎαα·αααααααααααααΆαα αααααΆαα’αααααααααααααΆαα
Profiling ααΆααααα αΆαααΆ αααααΈααΆααααααΆαααααααααααα ααααα αααΎαααααα ααΆαααα α ααα»α ααααααααΆαααΆα§αααααααααα ααΈαααααααααα·ααααα·ααΆαααααααααααΎαααααΆααα’ααααΎαα‘αΎααα αααα»αααααααααΆααα αααααΆαααΆααΆααααΆαα αααΎααααααααααΆα
αααααΆαααΉαααΈαααα αΆααα ααΎαααΆαααΉαααΆαααα αΆα’αΆα
ααααΌαααΆααααααΆααααααΆααααααΎαα’αΆαααα SSCs α―αααΆααααα½αα
private final ShortCircuitCache[] shortCircuitCache;
...
shortCircuitCache = new ShortCircuitCache[this.clientShortCircuitNum];
for (int i = 0; i < this.clientShortCircuitNum; i++)
this.shortCircuitCache[i] = new ShortCircuitCache(β¦);
α αΎαβαααααΆααβααβααααΎβααΆαβααΆαα½αβαα½αβαα αααβαα·αβααΆααβαααα αΌαβα ααα»α βαααααααβαα βαααααβα’α»α αααα·αβα α»αβαααααα
public ShortCircuitCache getShortCircuitCache(long idx) {
return shortCircuitCache[(int) (idx % clientShortCircuitNum)];
}
α₯α‘αΌααααα’αααα’αΆα α αΆααααααΎαααΆαααααα ααΎααααΈααααΎααΌα αααααΎαααΉαα’αΆαα―αααΆαααΈ HDFS ααΆαα½αααΉααααααα·ααΈαα α»ααααααΆααααα ααααααααΆαααΆααααααα
conf.set("dfs.client.read.shortcircuit", "true");
conf.set("dfs.client.read.shortcircuit.buffer.size", "65536"); // ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ = 1 ΠΠ ΠΈ ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π»ΡΡΡΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π½ΡΠΆΠ΄Π°ΠΌ
conf.set("dfs.client.short.circuit.num", num); // ΠΎΡ 1 Π΄ΠΎ 10
α αΎαααααΆααααα’αΆαα―αααΆαα
FSDataInputStream in = fileSystem.open(path);
for (int i = 0; i < count; i++) {
position += 65536;
if (position > 900000000)
position = 0L;
int res = in.read(position, byteBuffer, 0, 65536);
}
ααΌααααααααΌαααΆαααααα·ααααα·αααα»ααααααααα‘αΆαααΆα ααααα‘αα α αΎαααΎαααΉααααααΎαα ααα½αα―αααΆαα’αΆααααα»ααααααααΆαααααΆ (ααΈ 10 αα 200 - α’ααααααααα) αα·αα ααα½αααααΆαααααααΆαα (ααΈ 1 ααα 10 - ααααΆα ααα·α)α α’ααααααααααααα αΆαααΈααΆααααααΎαααααΏαααααααααΆαααααΈααΆαααΎαα‘αΎααα SSC ααΆαααααα ααΉαααααΈαα ααααααααΆαααααΆαααααααΆαααααα½αα
ααααα’αΆαααααΆα ααα αααααααΆααααα·ααααα·αααααΆαα 100 ααΆααα’αΆααααα»ααααα»α 64 KB ααΆαα½αααΉαααααΆαααααααΆαααα½αααααΌαααΆα 78 αα·ααΆααΈα α
ααααβα―βααααΆααβαααααΆαα 5 ααΆβααααΌαβα
αααΆαβααα 16 αα·ααΆααΈα ααΆαααααα ααΆαααΆααααααΎαααααΏα ~ 5 ααα ααΌα
αααα’αΆα
ααΎαααΎαααΈααααΆα αα α₯αααα·ααααΊαα·ααα½αα±ααααααααααΆαααααααΆααααΆαα’αΆααααΆαααΆα‘αααα½αα
ααα½αααΌα
αα ααΆα
αΆααααααΎαααΎααα½ααΆααΈαα½αα±ααααααααααΆαααα
αααααΆαααΆαα’αΆαα
αααΎαααΆα 50 αααααααα‘αΆαα ααΆαααα½αα±ααααααααααΆαααααααααΆααΆααααααΎαα
ααα½α SSCs ααΈ 6 αα·αααΆαααΎαααααααΌαααΆαααΎαα‘αΎαααααΆαα’αα»αααααα·α
αα½α
α
α αααΆα 1: αααααΆααααααααααααααΆαααΆααααααααα½αααααΆαα (ααΌαααΎαααΆαααααα) ααΆααααα ααα½α 3 ααααΌαααΆαα’αα»αααα α αΎααααααααααααααΊααΆαααααα
α αααΆαααΈ 2α ααααΎαααΆαααα½αααΆαααΈααΆαααααααα ααΆααααααααααΆαα αΌαααααΎαααα αααααααΊααΌα ααααΆ αααααΈααΆααΆαα αΌαααααΎαααα½αααΆααΊαααΆαααααα·α αααααα
ααααααΆαααΆααααα α αΆαααΆα αααααΌααααααΆααα±ααα αααΆααααΆ αα·αααΌα ααααΈααΆαα½α HBase ααΆααααααΎαααααΏαααααα·ααααααα₯ααα·ααααααααααα αα ααΈαααααΎα "ααααα" αααααααΆααααα CPU αααα»αααΆαααααΎααΆαααΆαααΆααααα αααΎα αααα½αα±ααααΆααααα½ααα ααΎααα
αα
ααΈαααα’αααα’αΆα
ααααααααΎαααΆ ααΆααΌαα
ααΆαααΎαα‘αΎαααα
ααα½αααααΆαααααααΆαααααααααΌαααΆαααΎαα‘αΎααααΆααΆααααααα αΆαααααα ααααααΆαααααΎααααΆαααααΈααΈααΌα ααααααΆαααΆαααααααΆαααααααααααααα
αααΎαααΆαααααα·α
α
ααΆα§ααΆα ααα ααΌααααα‘ααααΎαααΆαααααα SSC = 3 α²ααααΆαααααα·ααααα ααΆαααΎαα‘αΎαααααΆαα’αα»ααααααΎαα½αααΊαααα αα 3.3 ααα ααΆαβαααααβαααβααΆβααααααβααΈβααΆαβαααβααΆααβααΈβααΆα αβαααβα‘ααβααΈβααααΆα
αααααααααααΆαααααΎααααΆαααααΈααΈααΌααΎαα‘αΎααααα αα 2.8 ααα ααΆααα»ααααααααααΆααααα·ααααα ααα»αααα Greta ααΌα
αααααΆαα
α·ααααα½α
αα
α αΎα α αΎααααα ααααΆααΆαααααα
ααΆααΆ αα·ααααα
ααΌα αααα ααΆααΉαααΆαα₯αααα·αααα·αααααΆααααααΆααα§αααααααΆαα½ααααααααΎααΆαα αΌαααααΎαααΆαααΆαα αααΎααα ααΆαα HDFS (α§ααΆα ααα Spark α . ααΎααααΈαα·αα·αααααΎα ααΌαααΆαααααααΆααΎααΆαααααΎααααΆαααα½αααααΆααααΆααααααΎαααααα·αααααΆα BlockCache αα·αααΆααααααααΌα SSC αααααΆααααΆαα’αΆαααΈ HBase ααΉαααΆαα’αααΈααααα
ααΆα’αΆα
ααααΌαααΆαααααΎαααΎαααΆαα
αααααααααααααααααααα₯αααα·ααααΊαα·αα’ααα
αΆαααααΌα
αα
αααα»αααΆαααααΎαααααα
ααααΆαα (α’αΆααααααααΆαααααΎαααΆαααΆαα½α) ααα»ααααααΆαα·αααΆα’αΆα
ααααΎαα
ααΆαααΎααααΈα
ααααΆα
αα
αα 80K αααααααα
ααΈαααα αα½αααααΆ ααΆααααααΎαααααα·αααααΆαααΆααααΈααααααααΌαααΆααααααΎαααααΏαααααα
4 ααα
PR ααααααΌαααΆααααααΎαα‘αΎααααααΆααααΆααααααΎαααααα·αααααΆαααααααααα
α αΎαα α»αααααα ααΆααΆααΆααα½αα±ααα αΆααα’αΆαααααααααα»αααΆαααααααααααΆαα’αΆαααααΌαααααΆααα·αααααααααααΆααα½αααααααΌααΆαααααααααααΆ Cassandra αα·α HBase α
ααΎααααΈααααΎααΌα αααα ααΎαααΆαααΎαααααΎαααΆαα§αααααααααΎααααΆααααΆαααααααΆααααα»α YCSB αααααααΆαααΈαααΆαααΈαααΈα (ααα»αα ααα½α 800 αααα)α αα αααααααΆααααΆαααΈααα - 4 ααααΈαα RegionServer αα·α Cassandra αα ααΎ 4 αααΆαααΈα (αα·ααααααΆαααααααααα’αα·αα·αααααα»αααααΎαααΆαααΎααααΈαααααΆαα₯αααα·αααααααα½ααα) α ααΆαα’αΆαααΆαααααΈααΆααΆαααα αα
HBase - 300 GB αα ααΎ HDFS (αα·αααααααα»ααα 100 GB)
Cassandra - 250 GB (αααααΆα αααα = 3)
ααΆαααααα ααα·ααΆαααΊαααα ααααΌα ααααΆ (αααα»α HBase ααααα·α ααα) α
αααΆαααΆαααααα HBaseα
dfs.client.short.circuit.num = 5 (ααΆααααααΎαααααα·αααααΆααααΆαααΈαααααα HDFS)
hbase.lru.cache.heavy.eviction.count.limit = 30 - αααααΆααααααΆααααααΉαα αΆααααααΎαααααΎαααΆααααααΆααααΈααΆαααααααα αα 30 (~ 5 ααΆααΈ)
hbase.lru.cache.heavy.eviction.mb.size.limit = 300 - ααα·ααΆαααααα ααααααΆαααααααΆαα αα·αααΆαααααααα αα
αααααα ααα» YCSB ααααΌαααΆαααα αα·αα αααααααΆααααΆα αα Excelα
ααΌα
αααα’αααα’αΆα
ααΎαααΆααααααΎαααααα·αααααΆαααΆαααααααααΎα±ααααΆα’αΆα
ααααααααααααΎαααΆαααααΌαααααΆααα·ααααααααΆααααααα
αααααααααααααααΆααααααα·ααααααα
ααΆα 450 ααΆααα’αΆααααα»ααα½ααα·ααΆααΈα
ααΎααααααΉαααΆααααααΆααααα’αΆα
ααΆααααααααααααααΆααααααΆααααΆαααααα»αα’αα‘α»ααααααααΌααααααΎααααααΆααααα·αααΆαα
ααααα: www.habr.com