ášáµáá
á³á³ áá á²á°á© ášáá°á á áááá ášáá«áµááááµ ááá ááµááá¶áœ á áá± áá. á¥áᣠá Sberbank ášááᥠáááµ á áµá°á³á°á ááµá¥á£ áááá áááµ áá»áá áá¥áá¶áœá áá° áá±á-á°á®á á³á³ ááááµ á¥á«áµáá£á ááᣠá¥á áµááá
áµáá
ášáášá áá°á¶áœá á¥á«áµá°áááµá ááᢠá á°áá¥á® á¥á áá áá á ááááá ááá»á»á áááá¶áœá á¥áááááá ᣠá¥á á áá ášRegionalServer HBase á¥á HDFS á°áá áá á¥ááŽáµ ááµá°á«ášá á¥áá°á»áá áááááá á¥áááááá ᣠáá
á ášáá£á¥ áŠáá¬áœáá áá¥ááµ á ášáá°á ááá³ ááá³á°á á áµáœáá³áá¢
ááá áá° áá»á»á«áá¹ áááµ ášááá áá á ááµ á ááá
á°ášá á á€áœá²á² áá ášá°ááá¡ áá³áá ášáááœááµá áá°áŠáœ ááá«áµ á áá áá á¢
ááá HDD á¥á áá£á ášáááá° áá³ášá» áá£á¥ ášááá£á£á áážáá¢
á¥áá°áá³ááá HBase á¥á ááᜠá¥á ášááᥠáá³áᜠáášáá á á áá«á³ á áµá áªáá£ááµ áá áážá á«ášáá»áᢠá áá£áª áá
áá° 64 áª.á£. á áá 100 á£ááµ á¥á» ááááµ á¥áá³áá¥á á áµá¡áµ á¥á HBase áá
á áášá ášá°áá°á ááá á áá áá á¥áá²á°á á á¥áá ááááᢠá HFiles ááµá¥ á«áá ášááá áá á 64 áªá£ áµáááᣠá¥á«áá ášáá«áµáááá 640 á¥á¥á áá áá£á (á ááµ á°áá á¥á»!)á¢
á á°ášááªáᣠá¥á«áá á á€áœá²á€áá€áµ á¥á á áá³á³á³ áážáá« ááŽá á á©á áµááá«áá ShortCircuitCache (áá á á áá¥á³ áá° áááᜠááµášáµá ááá á³á), ášáá« áá ááµááá 1 áᣠášá²áµá ááá á¥á á«áá£á. ááá, áá á áááªá«á ááµá°á«ášá ááœáá dfs.client.read.shortcircuit.buffer.áá á á¥á á á¥á á áá£ááᜠáá áá áá ááááµ áááá«á³á áá, ááá³á áá° 126 áª.á£.
áá á á¥áá°áááá á¥áá á ááá áá á á°ášá᪠áášáá á áá« api ááá ᥠáµáááá á¥áá° FileChannel.read á£á á°áá£á«áµ á¥á áŠáá¬á²áá á²áµá°áá ášá°áá°ááá ášááᥠáá á á¥áá²á«áᥠá áá ášá "áá á¥áá° áá" 2 á¥á¥á áááá³á. ᣠáááµá á¥.á€.á . á á¥á ááá³ á 256 áª.á¢. áááá«á±á áá á á£á ᪠ááášáášá á áá« ááµá¥ FADV_RANDOM á£áá²á« ááááááµ ááá ááááµ áµááá ááá¢
á áá€á±á, ášá¥áá 100 á£ááµ áááááµ, 2600 á¥á¥á á°ášá᪠á á®áµ ááµá¥ áááá³á. áááµáá ááá ášáá áááµáá á£ášá¥áá áá áá áá° áªáá£ááµ á¥áááá°á á£ášá°á áá°áá á£áá²á« á¥ááµááá á á¥á á³áá ášá¥áááµ ááá á á¥áááᢠáœáá© áá ášááááá áá á á 2 áá á ááááµ á á ááµ ááá áá ášá°ááá° á£ááµ áá¥áá á 2 á¥á¥á á¥áááá³áá.
ášFADV_RANDOM á£áá²á« á áááááµ ášá°áá°á áµáá ááááµ áá»áá ááá áá á ášáá°á á£áá¥á-áá á¥á 128 áªá£ ášááá áá á á¥á» ááᣠááá áá áá á¢á á á áµá á áá¶áᜠášááá á© á áá¶áᜠášááá á© áážáá¢
áá°ááá¹ ášá°á«áá±áµ á 100 áááᜠáá á²áá á¥á«áá³áá³ážá 1 áᢠáá á á«áážá á¥á á 10 HDDs áá ááááá¢
á á¥áá°áá
ááááµ áá¥ááµ á áá ášá± ášáááá¥ášáá á¥áá°ááá-
áš 10 á²áµá®áœ á 280 áᣠ/ á° áá¥ááµ á¥ááá£áá á¥áá á, áááµá. 3 ááá®á áá 100 á£ááµá¢ áá á¥áá°áááµá³áá°á, ášá°áá á á 2600 á¥á¥á á«áá° ááᥠá¥áááááá. áµááá
, 3 ááá®á á 2600 á¥áá«áááá á¥á á¥ááááá á á°ášááµ 1100 ááááŠáœ.
á°áµá á áµáá«áᣠá áá°á? á°áá¥á® á¥áá²á ááᢠášáááá° áá³ášá» á á€áœá²á² áá ášááᥠáá³ášá» - ááá á¥áá³á ášáááá áá á ááá ááá áá. áá ášáá²á¥ á°á°á«áœááµ á á«áá áá°á¥ ááᣠá¥á ááá á áááµ á³á³á€á á á¥áá°áá á áááµ ááá³áᜠá°ášá᪠áááá á ááœááá¢
á³á²á« áá ášá¶áœ á á£á ášáá°á áá¥ááµá á¥ááŽáµ ááááµ ááœáá? ááá á¥á«á áááµ áááááµ á áášá°áá á¥áá áá áá á¥áá° áá á¥áááášáµá¢
á¥áá
ášááááªá«áá¹ á°áááᜠáá¥áá± á áŽá®ááµ á ááµ áºá
á«á
á áªášáá¶áœ áááá á¥áá«áá. ááá ᣠášá°á ášáá á áá á¥á á áááá± áááá«áµ áášáá á áµááá° áááá (ááááµ) á¡á / áážáá« ááµá¥ á°ááá§á á¥á áá¥áá± á á°ášááµ áá° 60 áºá
ášáááµ á«áµááá¢
áµááá ᣠá áµááá° áááá áážáá« ááµá¥ á«ááµá ááá á á€áµá€áµá²/á€ááªá€áဠáášáá»áᜠááµá¥ á á°ááá᪠ášáá³ášá» áá¥ááµ ááµá¥ ášááááµá ášá¥ááá«á áášááᜠá¥á» á°á°á«áœááµá ááá á á¥áá°á«ááá¢
á á¥á áá᳠ᣠá 4 á áááá®áœ áá áášá«ááœá á¥áá°áááá ᣠá¥á«áá³áá³ážá á¥áá°áášá°áá áášááá á¢
á²áá©á¡ Xeon E5-2680 v4 @ 2.40GHz 64 áá®áœá¢
áá
á°áš áµááµá³: 730 áá£.
áá« áµáªáµ: 1.8.0_111
á¥á á¥áá ááá áá¥á¥ ááá ᥠášáá«áµáááá á á°áá ášáŠáœ ááµá¥ á«áá ášááᥠáá á áá. á¥ááá³á áá áá á áá áá° HBase áážáá« ááµá¥ ášááá£á á áá ášá¥ áá áášáá á«áá á¡ ášáŠáá¬á²áá á²áµá°á á¡á/áážáá« áááá ᥠá¥áá³á á ááá£áᢠáááá«á±á HBase á áá£áªááµ 40% áá á°áš áµááµá³á BlockCache áá°á£á ááá á áááµá£áᢠá á¥ááá±á£ áá ConcurrentHashMap ááᣠááá ášááá áµá + ášáááá áá«á«á» á²áá á¥áŽá± á áá áá«á«á» áá á«áá áµááááá á³á³ ááá¢
áµááá
, ášáá
ááá
á á¥á» áµááá¥, á¥á
ááá³á, á á¥á ááá³, á á ááµ RS áá á«áá áš BlockCache áá á 12 áᢠáá°á áá. á á ááµ ááµááá ááááµ áá áááµ RS á ášáá, áááµá. 96 áᢠá ááá á áááᜠáá á BlockCache á°ááµá§áᢠá¥á á á°áá³á³á áá, á¥á á°ášá᪠áášááᜠá á, ááá³á, á¥á«áá³áá³ážá 4 á°áá ášáŠáœ, 130 ááááœ, á 800 áᣠáá á á«áážá ááááœ, á FAST_DIFF ášá°ášáá, áááµá. á á á ááá 410 áᢠ(áá áá¹á áášá áá, áááµá ášáá£ááµá ááá³ áááµ ááµá¥ á³á«áµáá£).
áµááá , BlockCache ášá á ááá áášá 23% á¥á» áá á¥á áá BigData á°á¥á ášáá á«á áµáááá ááá³ áá á á£á ášáášá áá. á¥á á¥áá á á£á á³á¢á áááá«á - ášááá á áá ᣠáµáᜠáážáá« á²á᳠ᣠá áááá á¥ášá£á° ááá£á± ááá ááᢠá°ááá ᣠááµá¥á«áááµ á ááá áá áµ áá á¥á áµá«ááœá áá¥á«áµ á áá¥ááµ - áááµá ášáµáááµ á°áá£á«áµá ášáá¥á«áµ á ááµ áášáµ. ááá áá, áá ááµáášáµ á áá»áá, á¥á áµááá áá ááá ášá°ááš áá á³á á¥ááµá¥ - á áážáá«á ááµá¥ á«áá áášá áá áááá?
ááá³áá á¥áá ááá á¥á 1 ááá á¥á» ášá°ááá á áµ áážáá« á¥áá³áá á¥ááµá¥á¢ ášá«áŒá 3 á¥á¥á á áá áᥠášááᥠáá á áááµá«áµ áµáááá áá á¥áá°ááá á ášáá«á³á áá³á á¥áá á áá¡-
1. á¥áá³ 1 á áážáá« ááµá¥ á«áµááá¡
2. á¥áá³ 1 ášáážáá« ááµá¥ á«áµááá±
3. á¥áá³ 2 á áážáá« ááµá¥ á«áµááá¡
4. á¥áá³ 2 ášáážáá« ááµá¥ á«áµááá±
5. á¥áá³ 3 á áážáá« ááµá¥ á«áµááá¡
5 áµááá¶áœ á°ášááááá! ááá ááᣠáá ááá³ áá°á á á°á¥á áá á« á ááœááᣠá á¥ááá¥á£ HBase áá ááá ášááá á á áµá« á¥áá²á°á« á¥á«áµáá°áµáá ááᢠá á²áµ ášáášá ááá áµááᣠáá²á«áá ááá£á ášáµááá° áááá áážáá« áá á«áááášá¥ ááᥠá«áá£áᣠá á¥ááá«áŒá ááµá¥ á«áµááá ááᢠá áœáá ááááªá« áá á«áá á áááœá ášáœáá©á ááááµ á«á³á«á - áá»á» á°á¥á³á¢á ášáá á³áá¹ á᪠ááᣠášá£á¢ á ášá á¥ášáá ááᣠáµáá¿ áá¬á³ á á©á á¥á á ááá³á áµááµá ááµá¥ á¥ášá°á á³ášáœ ááᢠá¥á á¥á ášá áá² á°áᜠá á»ááµ á áá«ááá áµ áá á ááá°áá, áµááá á áá áá³á áá áá áá°ášá á¥áá°ááœá áá°á¥ á¥áááá«áá.
áá ááá á¥áá®áœ á áážáá«á ááµá¥ á«áá°ááᡠᣠáá ášá°áá°á áá¶á á¥á» ᣠáážáá«á ášáá á á áá á¥áá³áááµáµ? á 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 á ááá á¥á áá á¥áá°á°áá áš á°ááášáµá¡
áá€á± ááᜠáá. ášáá
á á³áœ á£ááµ áá«áᜠááµá¥ áá
ááá á ááá á¥áá°á°ášá°á° ááá
áááá - áá²á«áá á áááµ ááŸáœ áá áá° áá³áœ ááµáááá ááá£á ášá²á²áá ááá áµ á³áá°áá á¥á ášáá² áá¥á¶áœá á¥ááá¥á£áá á¢
á á°áá³á³á áá ášá²áá© á á ááá á«áµáá ááá áá ášá áá»ážá á á£á á«áá° ááá¡
á¥áá
áá á á¥ááá«áŒ ááµá¥ ášá°ášáá¹ á¥áá®áœ ášá°áá«á© áááážáá áᥠáá£á ášááá£á áá³á ááᢠá á¥áááᣠ95% áá°áᣠá«á± áášá ááᢠá¥á ááªá á¥áá° Bloom filters ááá LEAF_INDEX á¥á á«á áá³á³á³ ááá¢
áµááá , á á®á± ááµá¥ ášááá³ áášááá«á á¥áá«áá buf.getBlockType().isData() á¥á ááá áá³ ááµáá ááá£áá á ááááá ááá³ áážáá« ááµá¥ á¥ááµááá£ááá¢
á áá ááá±á á¥áášáá á¥á á á°áá³á³á áá á£á áªáá á áµáá¹ á áµá°á«áá. á ááááªá«á áá°á ášááášá«áá áá¶á = 20 á áµáááá á¥á BlockCache áµáᜠá°áá áá áᢠá áá áá° 23% á¥ááµááá á á¥á áááµ á²ášá°áµ ááášáµ á áš 100 á°ááá 5 áá®áœ á¥áášááá¢
á¥áá
áá ášááááªá«á áµáªáµ á á°ášááµ 100 áºá
á áá á á¥á«ááᜠáá áá²á«áá á£áªá«áá á¥áá°ááá³ á¥áá«ááᢠáááµá°á á¥áµáš 300 áºá
áá¥ááµá áá°á£áᢠá á°áá³á³á áá, á°ášá᪠ááá á ášá áá á áá "áá»" á¥áá³ááá ááᜠáá, ášá²áá© á á áááá á¥á«á°á áá.
ááá ᣠáá á á£á ášáá«áá áááµá á áá°áá ᣠáááá«á±á áá á«á á ášá¥áá®áœ áá¶á áá° áážáá« á áµááµáá á ááá á ᣠá áááµ áááá«á áá ášá°áá ášá° ááᢠáµááá á áá£á¥ áµá«áᜠá¥áá áµáᎠáá á áááµášáµ áá áá áá€áµ á á«áµ-á°á áááµá°á«ášá áᎠá°á°áá¥á¯áá¢
áá áá áááá£á á á¶áµáµ á áá«á®áœ á°ášáášááá¡-
hbase.lru.cache.ášá£áµ.ááµáá£áµ.ááá á.áá°á¥ - ááá»ážáµá áá áá ášáááá«áœá á ááµ áášáá ášáážáá«á ášááµáá£áµ áá°áµ áá á«á á áá áááá á¥áá³áá áµ á«áááá (áááµá á¥áá®áœá áááá)ᢠá áá£áªá£ ášMAX_INT = 2147483647 áá á¥á©á áá á¥á á á¥ááá± á£á áªá ášáá á¥áŽáµ áá ááµá«áµ á ááááá áááµ ááᢠáááá«á±á ášááááá áá°áµ á áš 5 - 10 áŽá®ááµ (á ááá± áá ášá°áá°ášá° áá) á¥á 2147483647 * 10/60/60/24/365 = 680 ááá³áµá¢ ááá ááᣠáá áá áá€áµ áá° 0 á¥áááááá á¥á á£á áªá ášá áá© á áá áá²á«áá á¥áá²á°á« ááµášá á¥ááœáááá¢
áááᣠá áá áá€áµ ááµá¥ ášáááá« áááµá á áᢠášá áá áá áá£á¥ (áá á¥áá á) á¥á ášášá¥á áá áá£á¥ (á áááµ) á«áááášá¥ ášá°á ááá ášááá± á°áá¥á® á«áá ášášá á áá ášááá ᥠáµá«áᜠá²ášááá á¥á» á£á áªá á¥áá²á á« ááµášá á¥ááœáááᢠá áá°áµ áá.
ááá³áᣠášá áá áá áá£á¥ á á¥áááá áá 1 á°áá á«á á á¥áá°ááá á¥áááááᢠá¥áá®áœá ááááá áááá á á«áµáááá ᣠáážáá«á ááá á«ááá áµ áááá áá á ááášáá ᣠá¥á ášáá« áá áá áá€áµ ááá³á 10 á áááá á¥ááœááá ᣠáá ááá»ážáµ ášá á áá áá£á¥ á²áá á¥á» áá°ááá á¥ááá³ ááá«á ᢠá°ááá¯áᣠi. áš 100 á°ášááµ á áá. áµááá ášá áá áá áá£á¥ á«áá ááá á¥áá®áœ áá° áážáá«á ááµá¥ ááá£á á¥á áááá (á áá°á á áµáá° ááá ášááá¡áµ á áµá°áá)ᢠá¥á ášášá á áá áá£áŠáœá áµáá°áá á£á áªá áá á«á á¥á á á£á ášá°á»á á áá»ážá ááášááá¢
hbase.lru.cache.ášá£áµ.ááµáá£áµ.mb.áá á.áá°á¥ - á 10 á°ášááµ ááµá¥ áá á«á á ááá£ááµ áážáá« ááµá¥ ááµááᥠá¥áá°ááááá á«ááááᢠá£á áªá áá áá á¥áŽáµ áááµášáµ á¥á áááášáµ áááá«áᢠááá ááá ááá£ááµ áá° áážáá«á ááµá¥ á«áµáá£á ááá£ááµ áá£ášá á áá áµ áá á°áá ášáá á¥áá³ášáá á á£á ááµ ááᢠááá áá, á á£á áµáᜠááááááµ ááášá ášáá¥ááµá, áááá«á±á áá ášá¥áá áááá ááá³ á«áááá ááá£áµá á«áá£á. ááááá á áááá®áœ (áš20-40 á á«áá á®á®áœ) áš300-400 áᣠá á«á£á¢ áááááµ á¥á© ááᢠááá«ášááá ááá (~ 10 á®á) 200-300 áá£. áá°á«á áµááá¶áœ (2-5 á®á) 50-100 áᣠáá°á á ááá ááœáá (á á¥áá°áá á áááµ áµááá¶áœ áá á ááášáá).
á¥ááŽáµ á¥áá°áá°á« á¥áááášáµá¡- hbase.lru.cache.heavy.eviction.mb.size.limit = 500 á ááá á°áá á¥áá áᣠá ááµ ááááµ áááµ (ááá á¥) á á ášáá«á á áš~10 á°ášááµ áá á«á á á£ááµ á¥áá°á°á£ášáš á¥áá°áááᢠá áááá¡-
ášá á á á áá = ášá°áááá á£ááµ áµáá (áá£) * 100 / áá°á¥ (áá£) - 100;
á á¥ááá± 2000 áᣠášá°á£ášá© ᣠášáá« á áá á«áá ááá« ášáášá°ááµ áá á¥á©á áá
2000 * 100/500 - 100 = 300%
á áááªáá ášá¥ááµ á áµá á áᶠá«áá áá ááá°áá áááá«áá£áµááá á£á áªá ášá°ážáá¡ á¥áá®áœá áá¶á áááá³áá£á áá á ášá«áµ-ááµá°á«ášá« ááŽá á°áá£á«á á«á°áááá¢
ááá ááᣠááá± ášááá°á£ 200 áá á£ááµ á¥á» á°á£ášáš á¥á áŠášá ááµ á áá³á áááá (ášáá á á áá áá°á®áµ ášáá£áá) á¥áá áá¡-
200 * 100/500 - 100 = -60%
á« á£á áªá£ á á°áá«áá ášá°ážáá¡ á¥áá®áœ áá¶áá áášáá«á Overhead á ááá³á á¥áµáªáá áµášáµá¢
ášá³áœ á á¥ááá°á ááᥠáá á¥ááŽáµ á¥áá°áá³á ášáá«á³á áá³á áá. 0% áááµášáµ ááášá á á«áµáááá, ášááá»á áá. áš 30 - 100% áá°á á áááá áµ áá á á£á á¥á© áá, áá á á áá áá ááá³á³ áá ášááá»ážáµ ááá³ á«áááá ááá£áµá áááµáááµ áášá³á.
hbase.lru.cache.ášá£áµ.ááµáá£áµ.ášáá.á á«áá - áá€á±á áá á«á á á áá¥ááµ ááááµ á¥áá°ááááá á«ááááᢠášá¥á áá£áŠáœ á á á¥ááá ášá á á¥áá°áá á¥á áá á á á¥áá°ááááá á á¥ááá áááµ á«áá á áá áá áááá«áµ áá³á°á á¥á ášáá°á á áááá á áá¥ááµ ááááµ á¥ááœáááá¢
ááá³á, áá áá á áá áµ = 0.01 á ááá á°áá. áá áááµ áŠášáááµ (ášáá áááášá±) á áá€á± á áá áá¥á áá£áá á¥á ášá°ážáá¡ á¥áá®áœ áá¶á áááá³áᢠá¥áá á áŠášáááµ = 300%ᣠá¥á á®áážá = 0.01ᣠášáá« ášá°ážáá¡ á¥áá®áœ áá¶á á 3% áááá³áá¢
á°áá³á³á âášáá áááµâ á áááá® á¥áá²á ášáá á á áá áá°á®áµá á áá³á á¥áŽá¶áœá áá°áá á«áᢠášá áá áá ášáá£á¥ áá á ááááᥠá¥á ááµáá£áµ áá áá ááá© áµáááœá áá áᎠášááá»ážáµ ááá³ á«áááá ááá£áµá áááµáááµ á«áµáœááᢠ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;
}
á áá áá áá áá á á¥ááá°á áá³á á áµá¡á áµá¢ ášáášá°áá ášáášá« ááá³ á ááá¢
- áµá«á ááµášá áááá© (25 áá®áœá£ á£áœ = 100)
- áš 5 á°áááᜠá áá, á£áá¥á-ááµ (25 áá®áœ, á£áœ = 100) áášáá©.
- áš 5 á°áááᜠá áá, á£áá¥á-ááá¶áœá á«á¥á (áµá«á á¥á» á¥áá°áá ááá«á)
áááµ á©á«ááœá á¥áá°áááá á ááááªá« hbase.lru.cache.heavy.eviction.count.limit = 10000 (áá á á£á áªáá á áµááá á«á°áááá) á¥á ášáá«á áá°á¥ = 0 á ááá á°áá (á«áááá¢)
ášá³áœ á£ááµ áááᥠááµá³áá»áᜠááµá¥, á£á áªá á¥ááŽáµ á¥áá°áá á« á¥áá«áá, Overshootingá áá° 14-71% á³áá á«áµááášáá. ášáá áá° áá ááá± áááµáá, áá á Backpressureá á«á á«á á¥á HBase á°ášá᪠á¥áá®áœá á¥áá°áá á«á á«á.
ášááá á áááá áááá¥
ášá°á£ášáš (áá£): 0ᣠá¬áŸ 0.0ᣠášá ááµ (%): -100ᣠášá£áµ ášááµáááá« áá£áª: 0ᣠášá áá áážáá« DataBlock (%): 100
ášá°á£ášáš (áá£): 0ᣠá¬áŸ 0.0ᣠášá ááµ (%): -100ᣠášá£áµ ášááµáááá« áá£áª: 0ᣠášá áá áážáá« DataBlock (%): 100
ášá°á£ášáš (áá£)á¡ 2170ᣠá¥ááá³ 1.09ᣠášá ááµ (%)á¡ 985ᣠášá£áµ ášááµáááá« áá£áªá¡ 1ᣠášá áá áážáá« DataBlock (%)á¡ 91 <á
áá
ášá°á£ášáš (áá£)á¡ 3763ᣠá¥ááá³ 1.08ᣠášá ááµ (%)á¡ 1781ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 2ᣠášá áá áážáá« DataBlock (%)á¡ 76
ášá°á£ášáš (áá£)á¡ 3306ᣠá¥ááá³ 1.07ᣠášá ááµ (%)á¡ 1553ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 3ᣠášá áá áážáá« DataBlock (%)á¡ 61
ášá°á£ášáš (áá£)á¡ 2508ᣠá¥ááá³ 1.06ᣠášá ááµ (%)á¡ 1154ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 4ᣠášá áá áážáá« DataBlock (%)á¡ 50
ášá°á£ášáš (áá£)á¡ 1824ᣠá¥ááá³ 1.04ᣠášá ááµ (%)á¡ 812ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 5ᣠášá áá áážáá« DataBlock (%)á¡ 42
ášá°á£ášáš (áá£)á¡ 1482ᣠá¥ááá³ 1.03ᣠášá ááµ (%)á¡ 641ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 6ᣠášá áá áážáá« DataBlock (%)á¡ 36
ášá°á£ášáš (áá£)á¡ 1140ᣠá¥ááá³ 1.01ᣠášá ááµ (%)á¡ 470ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 7ᣠášá áá áážáá« DataBlock (%)á¡ 32
ášá°á£ášáš (áá£)á¡ 913ᣠá¥ááá³ 1.0ᣠášá ááµ (%)á¡ 356ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 8ᣠášá áá áážáá« DataBlock (%)á¡ 29
ášá°á£ášáš (áá£)á¡ 912ᣠá¥ááá³ 0.89ᣠášá ááµ (%)á¡ 356ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 9ᣠášá áá áážáá« DataBlock (%)á¡ 26
ášá°á£ášáš (áá£)á¡ 684ᣠá¥ááá³ 0.76ᣠášá ááµ (%)á¡ 242ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 10ᣠášá áá áážáá« DataBlock (%)á¡ 24
ášá°á£ášáš (áá£)á¡ 684ᣠá¥ááá³ 0.61ᣠášá ááµ (%)á¡ 242ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 11ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.51ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 12ᣠášá áá áážáá« DataBlock (%)á¡ 21
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.42ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 13ᣠášá áá áážáá« DataBlock (%)á¡ 20
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 14ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 15ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.32ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 16ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.31ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 17ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.3ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 18ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.29ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 19ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.27ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 20ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.25ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 21ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.24ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 22ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.22ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 23ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.21ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 24ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.2ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 25ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.17ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 26ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£): 456ᣠá¬áŸ 0.17ᣠášá ááµ (%): 128ᣠášá£áµ ášááµáááá« áá£áª: 27ᣠášá áá áážáá« DataBlock (%): 18 < á³ááá á«ááá (ááá áá á áá ášá¥ á ááµ áá)
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.15ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 28ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.13ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 29ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.11ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 30ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.09ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 31ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.08ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 32ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.07ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 33ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.06ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 34ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.05ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 35ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.05ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 36ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.04ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 37ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 109ᣠá¬áŸ 0.04ᣠášá«áµ á áá (%): -46ᣠášá£áµ ášááµáááá« áá£áªá¡ 37ᣠášá áá áážáá« DataBlock (%)á¡ 22 <ášáá áááµ
ášá°á£ášáš (áá£)á¡ 798ᣠá¥ááá³ 0.24ᣠášá ááµ (%)á¡ 299ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 38ᣠášá áá áážáá« DataBlock (%)á¡ 20
ášá°á£ášáš (áá£)á¡ 798ᣠá¥ááá³ 0.29ᣠášá ááµ (%)á¡ 299ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 39ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 570ᣠá¥ááá³ 0.27ᣠášá ááµ (%)á¡ 185ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 40ᣠášá áá áážáá« DataBlock (%)á¡ 17
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.22ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 41ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.16ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 42ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.11ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 43ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.09ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 44ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.07ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 45ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.05ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 46ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£)á¡ 222ᣠá¥ááá³ 0.04ᣠášá ááµ (%)á¡ 11ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 47ᣠášá áá áážáá« DataBlock (%)á¡ 16
ášá°á£ášáš (áá£): 104ᣠá¬áŸ 0.03ᣠášá ááµ (%): -48ᣠášá£áµ ášááµáááá« áá£áª: 47ᣠášá áá áážáá« DataBlock (%): 21 <ááášá¥ á«ááá
ášá°á£ášáš (áá£)á¡ 684ᣠá¥ááá³ 0.2ᣠášá ááµ (%)á¡ 242ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 48ᣠášá áá áážáá« DataBlock (%)á¡ 19
ášá°á£ášáš (áá£)á¡ 570ᣠá¥ááá³ 0.23ᣠášá ááµ (%)á¡ 185ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 49ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.22ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 50ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.21ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 51ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.2ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 52ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.18ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 53ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.16ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 54ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 228ᣠá¥ááá³ 0.14ᣠášá ááµ (%)á¡ 14ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 55ᣠášá áá áážáá« DataBlock (%)á¡ 18
ášá°á£ášáš (áá£)á¡ 112ᣠá¬áŸ 0.14ᣠášá«áµ á áá (%): -44ᣠášá£áµ ášááµáááá« áá£áªá¡ 55ᣠášá áá áážáá« DataBlock (%)á¡ 23 <ášáá áááµ
ášá°á£ášáš (áá£)á¡ 456ᣠá¥ááá³ 0.26ᣠášá ááµ (%)á¡ 128ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 56ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.31ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 57ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 58ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 59ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 60ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 61ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 62ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 63ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.32ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 64ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 65ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 66ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.32ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 67ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 68ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.32ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 69ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.32ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 70ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 71ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 72ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 73ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 74ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 75ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£)á¡ 342ᣠá¥ááá³ 0.33ᣠášá ááµ (%)á¡ 71ᣠášá£áµ ášááµáá£áµ áá£áªá¡ 76ᣠášá áá áážáá« DataBlock (%)á¡ 22
ášá°á£ášáš (áá£): 21ᣠá¬áŸ 0.33ᣠášá ááµ (%): -90ᣠášá£áµ ášááµáááá« áá£áª: 76ᣠášá áá áážáá« DataBlock (%): 32
ášá°á£ášáš (áá£): 0ᣠá¬áŸ 0.0ᣠášá ááµ (%): -100ᣠášá£áµ ášááµáááá« áá£áª: 0ᣠášá áá áážáá« DataBlock (%): 100
ášá°á£ášáš (áá£): 0ᣠá¬áŸ 0.0ᣠášá ááµ (%): -100ᣠášá£áµ ášááµáááá« áá£áª: 0ᣠášá áá áážáá« DataBlock (%): 100
áá°á»á ášáá«áµáááá á°áá³á³á áá°áµá á áážáá«á áááµ áááᜠáá«ášá á«ááá áááááµ á áá«á ááá ááá³ášáµ áá - áá á (ááá á¥áµá«áá á«áá ášáá£ážá á¥áá®áœ) á¥á á¥á (âášá°á ášááâ ááᥠá¢á«ááµ á ááµ ááᢠá¥áá á°ášááœá°áá):
á¥á á áášášá»á, áááªá«áᜠá áá«á ááá á¥ááŽáµ á¥áá°áá á©. áááááá á£áážáá«á ááááªá« áá áá á áá á áá·á á£ášáá«á áš HBase á
áá á áážáᥠá¥á ášááá»ážáµ ááááªá« á 5 á°áááᜠ(30 ášááµáá£áµ áá°á¶áœ) áááášáµ áá áá¢
áá á®áµ á Pull Request ááµá¥ ááááá¢
ááá áá á áŽá®ááµ 300 áºá áá£áŠáœ á á¥ááá ááá³áᜠááµá¥ á áá áááµáá áá áášáá ášááœááµ á¥á» á áá°ááᢠá¥ááá³á áá á á€áœá²á€áá€áµ á á©á áášáá ááááµ á²ááá áš ShortCircuitCache (ášáá á áá SSC) áᎠá¥á á áá áááá, áá á ášá áá³áš áášá¥ ááááá¶áœá á ááµáááµ á áá¥á³ áášáá áááµášáµ á«áµáœáá.
áá®ááááá á¥áá°áá«á³ášá áá áᎠáµáá áµáá á¢á«áµááá, á á°áá°á ááá ááá áááá, áááá«á±á ááá áááµ áá»áá ášá£áµ áµá«áᜠá ááááá« ááµá¥ áášá°á³á, áá á á¥á áá áá° ááááá«áᜠááá«á.
áá
áá á ááááᥠáœáá©á ááµáášáµ ášáá»áá áááá°á ášáá 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)];
}
á áá ááášá áááá ááœááᢠáá áá áááµášá, ááááœá ášá€áœá²á€áá€áµ á ááá á£á á¥á áá áá°áá áªá« á¥ááá£áá. áááªá«ááœá á¥áááááá-
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 áášáá á ááµ áážáá« á¥á» á²áá ášáá³á© á ááá ášáá°á áá áá¥ááµ á«á³á«áá¢
áá«áá á¥ááŽáµ ááá ᥠáá»ááá¡ 100k á 64K blocks á á ááµ áážáá« áá£á¥ ááášášáµ 78 á°ášááµ áááµá³áᢠá 5 áážáá«áᜠ16 á°ášááµ áááµá³áᢠá¥ááá«á¢ ~ 5 áá ááá á á áᢠášáá«á áá á¥áá°áá³á©áµ á áµáᜠáµáá© áá£áŠáœ áá áá€á± á¥áá á áá³áá ᣠáá© á²áá ᥠᚠ50 á áá á áá áá ááá
áá áá«ááµ áááá«á ᢠá á°ášááªá ášá€áµ.á€áµ.á². 6 á¥á ášáá« á áá á ášáá°á ááá³ á«áá° ášá áááá áµáá áá°á£áá¢
ááµá³áá» 1 ášáá°á áá€á¶á¹ á á£á á°áááá áµááá (ášáá á á³áœ áááášá±) ᣠ3 á áá á°á«áá°áá á¥á ášá°áááµ á¥áŽá¶áœ á áá«á áážáá¢
ááµá³áá» 2á¡ ášáááá° áá³ášá» ááŒáµ ášá°ááá ášá áá»ážá áµáá á°áá³á³á ááᣠááá á¥áá³á áá³ášá»á á«á± áµáᜠáááá ááá¢
áááᣠášHBase áá á«áá ááá³ á á°ááš áá áá£á°á áááá áá á¥áá³ááá áááᜠá áá áµá¢ á¥áá á¥á á ááááá«áᜠáá ášááá áá á ááá ášá²áá©áá áµá« ášááµá«áµ áœáá³á ášá áá "ááááµ" á áá¥áá¢
á¥áá
á á á ááá ᣠášáážáá«áᜠá¥ááµ áášáá á á²áá© á á ááá áá á áááµ á°áá£á£á áá᪠á¥áá°áá°á¥ áášáµ ááœááᢠááá á¥áá á áá«á³ á°ášá᪠á ážáá á¥áášáµ á á.
ááá³áᣠá áá¥á©á á áá á¥áá á¥áááášá°á SSC = 3. á ááá áá á«áá ášá áá»ážá áá᪠3.3 áá á«á á ááᢠášáá á á³áœ á«ááµ ášá¶áµá±á ášá°áá«á© á©á«áᜠáá€á¶áœ áážáá¢
ášá²áá© ááá³ á 2.8 áá áá°á á«áµááᢠáá©áá± á á£á áµáá
á áá°ááᣠááá áá áµááœá¬ Greta á°áµá°á áᜠá¥á áááá£áµ áµáá
ááµ á€áµ á¥á áµáá
áá¶áœá ááášá³á°á áá ááá ááœááá¢
áµááá áá HDFS ášá áá áá³ášá»á (ááá³á áµááá ááá°) á áá áá ááááá áá³áªá« áá á ááá³á á°áœá¥á ááášááᣠášáá°áá áªá«á á®áµ ááá ášáá (áááµá á á€áœá²á€áá€áµ á°áá á á á©á áá°á«áµ) á¥á áá ášá²áá© ááá á¥áµá«á áµášáµá¢ áááá°áœá£ ášHBase áááá ᥠášBlockCache ááá»ážáµ á¥á SSC ááµá°á«ášá áá áá€áµ á¥áá°áá°á¥ á¥áááµáœá¢
á¥áá
áášáµ ááœáá á¥áá°áá
á£á ááá³áᜠáá€á± á¥áá° ášá°á£á« áášá«áᜠ(á«á ááá áá°áµ ááá á¥) áµáá
á áá°áá ᣠáá á¥áá
á°ášá᪠80 áª. á ááµ ááᣠááá±á ááµá£á¶áœ á¥áµáš 4 áá áá¥ááµá áá°á£áá¢
ááá
ááá»ážáµ PR á°á áá·áá¢
á¥á á áášášá»áᣠá°áá³á³á á°á-á ááµ á³á³á€á á«á³ááµá« á¥á á€áœá€á ášáá£á¥ á áá»ážáá ááá³á°á á áµá°á³áœ áá áá¢
áá áá áááµášáᣠášáá°á áá ášYCSB áááµ ááášáªá« ááááá« á áá£ááᜠášáááµ á áµá°áááᜠ(á á á ááá 800 áá®áœ) á°ááášááᢠá á áááá á á©á - 4 ášRegionalServer á¥á á«á³ááµá« á 4 á áµá°áááᜠáá (á°áá áᜠá°áœáá ážáá áááµáááµ á áá®á¡á áµ á áá°áá)ᢠáá£áŠáœ ášáá á á áá ášáŠáœ áá¡á¡-
HBase - 300 áᣠá á€áœá²á€áá€áµ (100 áᢠá¥á¬ áášá)
á«á³ááµá« - 250 áᣠ(áá£ááµ áááá«áµ = 3)
á¥ááá«á¢ áá á á°áá³á³á áá á (á HBase áµáᜠá°ášááª)á¢
áš Hbase á áá«á®áœ
dfs.client.short.circuit.num = 5 (HDFS á°áá á ááá»ážáµ)
hbase.lru.cache.heavy.eviction.count.limit = 30 - áá áááµ áá£á áá«á áš 30 áá£ášá á áá áá¥á«áµ áááá«á (~ 5 á°ááááœ)
hbase.lru.cache.ášá£áµ.ááµáá£áµ.mb.size.limit = 300 - ášáážáá« á¥á ášááµáá£áµ ááá áá á
ášYCSB áááᥠááµá³áá»áᜠá°á°ááµáá áá° á€ááŽá áá á³áᜠá°á°á¥áµá ááá¢
á¥áá°áááášá±áµ ᣠášááá»ážáµ áášáá á á¥ááá
ááá³áᜠááµá¥ ášá¥ááá
á ášááᥠáá³áᜠá áááá á¥á©á áááµášá á¥á á á°ášááµ 450 áá£áŠáœá ááá³á«áµ á«áµáœááá¢
áá
áášá áá áááá á áá«áµá°áµáµ áµáá áá°áµ ááµá¥ áá ááµ á°á á áá ááá á¥áá°ááœá á°áµá á¥áá°ááááá¢
ááá: hab.com