ืืืฆืืขืื ืืืืืื ืื ืืืช ืืืจืืฉืืช ืืืจืืืืืช ืืขืืืื ืขื ื ืชืื ืื ืืืืืื. ืืืืืงืช ืืขืื ืช ืื ืชืื ืื ื-Sberbank, ืื ื ืฉืืืืื ืืืขื ืืช ืื ืืขืกืงืืืช ืืชืื ื-Data Cloud ืืืืืกืก ืขื Hadoop ืืืื ืืชืืืืืื ืขื ืืจืืืืช ืืืืข ืืืืืืช ืืืืช. ืืืืคื ืืืขื, ืื ืื ื ืชืืื ืืืคืฉืื ืืจืืื ืืฉืคืจ ืืช ืืืืฆืืขืื, ืืขืืฉืื ืื ืื ื ืจืืฆืื ืืกืคืจ ืืื ืืื ืืฆืืื ื ืืชืงื ืืช RegionServer HBase ืืืช ืืงืื HDFS, ืฉืืืืืชื ืืฆืืื ื ืืืืืืจ ืืฉืืขืืชืืช ืืช ืืืืจืืช ืคืขืืืืช ืืงืจืืื.
ืขื ืืืช, ืืคื ื ืฉืขืืืจืื ืืืืืช ืืฉืืคืืจืื, ืืืื ืืืืจ ืขื ืืืืืืช ืฉืืืืคื ืขืงืจืื ื ืื ื ืืชื ืืขืงืืฃ ืื ืืืฉืืื ืขื ืืืกืง ืงืฉืื.
ืืืืข HDD ืืงืจืืืืช ืืืฉื ืืงืจืืืช ืืืืจื ืืื ื ืชืืืืื
ืืืืืข, HBase, ืืืกืื ื ืชืื ืื ืจืืื ืืืจืื, ืืืืกื ืื ื ืชืื ืื ืืืืืงืื ืืืืื ืฉื ืืื ืขืฉืจืืช ืงืืืืืืืืื. ืืืจืืจืช ืืืื ืื ืืขืจื 64 KB. ืขืืฉืื ืืืื ื ืืืืื ืฉืื ืื ื ืฆืจืืืื ืืงืื ืจืง 100 ืืชืื ืืื ื ืืืงืฉืื ื-HBase ืืชืช ืื ื ืืช ืื ืชืื ืื ืืืื ืืืืฆืขืืช ืืคืชื ืืกืืื. ืืืืืื ืฉืืืื ืืืืืง ื-HFiles ืืื 64 KB, ืืืงืฉื ืชืืื ืืืืื ืคื 640 (ืืงื ืืืื!) ืืื ืืจืฉ.
ืืืืจ ืืื, ืืืืืื ืฉืืืงืฉื ืชืขืืืจ ืืจื HDFS ืืื ืื ืื ืืืืื ืืืื ื ืชืื ืื ืฉืื ShortCircuitCache (ืื ืฉืืืคืฉืจ ืืืฉื ืืฉืืจื ืืงืืฆืื), ืื ืืืืื ืืงืจืืืช ืืืจ 1 MB ืืืืืกืง. ืขื ืืืช, ื ืืชื ืืืชืืื ืืืช ืืืืฆืขืืช ืืคืจืืืจ ืืืื.dfs.client.read.shortcircuit.buffer ืืืืงืจืื ืจืืื ืืืืื ื ืืืคืืืช ืืช ืืขืจื ืืื, ืืืฉื ื-126 KB.
ื ื ืื ืฉืื ืื ื ืขืืฉืื ืืช ืื, ืืื ืื ืืกืฃ, ืืฉืื ืื ื ืืชืืืืื ืืงืจืื ื ืชืื ืื ืืจื ืืืฉืง ื-Java API, ืืื ืคืื ืงืฆืืืช ืืื FileChannel.read ืืืืงืฉืื ืืืขืจืืช ืืืคืขืื ืืงืจืื ืืช ืืืืช ืื ืชืื ืื ืฉืฆืืื ื, ืืื ืงืืจื "ืืืงืจื" ืคื 2 ืืืชืจ , ืืืืืจ 256 KB ืืืงืจื ืฉืื ื. ืืกืืื ืืื ืืื ืฉ-java ืืื ืืจื ืงืื ืืืืืืจ ืืช ืืืื FADV_RANDOM ืืื ืืื ืืข ืืชื ืืืืช ืื.
ืืชืืฆืื ืืื, ืืื ืืงืื ืืช 100 ืืืชืื ืฉืื ื, 2600 ืคืขืืื ืืืชืจ ื ืงืจื ืืชืืช ืืืืกื ืืื ืืข. ื ืจืื ืฉืืคืชืจืื ืืืื ืืืืื, ืืืื ื ืฆืืฆื ืืช ืืืื ืืืืืง ืืงืืื-ืืืื, ื ืฆืื ืืช ืืืื ืฉืืืืืจ ืื ืจืืืื ืืืฆืช ืืืจื ืืืืื. ืืื ืืืขืื ืืื ืฉืขื ืืื ืืงืื ืช ืืืื ืืืืืง ืคื 2, ืื ื ืื ืืฆืืฆืืื ืืช ืืกืคืจ ืืืชืื ืื ืงืจืืื ืืืืืืช ืืื ืคื 2.
ื ืืชื ืืืฉืื ืจืืื ืืกืืื ืืืืืจืช ืืืื FADV_RANDOM, ืืื ืจืง ืขื ืจืืืื ืืฉืืืืช ืืืื ืืขื ืืืื ืืืืง ืฉื 128 KB, ืืื ืื ืืงืกืืืื ืฉื ืืื ืขืฉืจืืช ืืืืืื:
ืืืืงืืช ืืืฆืขื ืขื 100 ืงืืฆืื, ืื ืืื ืืืืื 1 GB ืืืืืงื ืขื 10 ืืืกืงืื ืงืฉืืืื.
ืืืื ืืืฉื ืขื ืื ืื ืื ื ืืืืืื, ืืืืคื ืขืงืจืื ื, ืืกืืื ืืืืืจืืช ืืื:
ื ื ืื ืฉืื ื ืงืืจืืื ื-10 ืืืกืงืื ืืืืืจืืช ืฉื 280 ืืื-ืืืื/ืฉื ืืื, ืืืืืจ. 3 ืืืืืื ืืคืื 100 ืืืืืื. ืืื ืืืืืจ, ืื ืชืื ืื ืฉืื ื ืฆืจืืืื ืื ืคื 2600 ืคืืืช ืืื ืฉื ืงืจื. ืืคืืื, ืื ื ืืืืงืื 3 ืืืืืื ื-2600 ืืืงืืืื 1100 ืจืฉืืืืช ืืฉื ืืื.
ืืืื, ืื? ืื ืืืืข ืืืฉื ืืงืจืืืช ืืืฉื ืื ืชืื ืื ื-HDD - ืืื ืงืฉืจ ืืืืื ืืืืืง. ืืืื ืืืืืื ืืคืืืืช ืฉื ืืืฉื ืืงืจืืืช ืืืฃ ืืกื ื ืชืื ืื ืื ืืืื ืืกืืื ืืืชืจ ืืชื ืืื ืืืื.
ืืืฆื ืื ืื ืืกืื ื ืชืื ืื ืืฉืืืื ืืืืจืืืืช ืืืืืืช ืืืจืื? ืืื ืืขื ืืช ืขื ืฉืืื ืื, ืืืื ื ืกืชืื ืขื ืื ืฉืงืืจื ืืชืืื ื ืืืื:
ืืื ืื ื ืจืืืื ืฉืืืงืืช ืืจืืฉืื ืืช ืืืืืจืืช ืืื ืืืืช ืืืืฃ ืฉืืืื ืืฉื ืืื. ืขื ืืืช, ืื ืืกืฃ, ืืฉื ืืขืืืื ืฉื ืงืจื ืืจืื ืืืชืจ ืืื ืฉืืชืืงืฉ, ืื ืชืื ืื ืืืืขืื ืืกืืคื ืฉื ืืืจ ื-buff/cache ืฉื ืืขืจืืช ืืืคืขืื (ืืื ืืงืก) ืืืืืืจืืช ืขืืื ื-60 ืืืฃ ืืืชืจ ืืืื ืื ืืฉื ืืื
ืืคืืื, ืืืืฉื ื ืขืกืืง ืืืืฆืช ืืืืฉื ืจืง ืื ืชืื ืื ืฉื ืืฆืืื ืืืืืื ืืขืจืืช ืืืคืขืื ืื ื ืืฆืืื ืืืชืงื ื ืืืกืื SSD/NVMe ืืขืื ืืืืจืืช ืืืฉื ืืืื.
ืืืงืจื ืฉืื ื, ืื ื ื ืขืจืื ืืืืงืืช ืขื ืกืคืกื ืฉื 4 ืฉืจืชืื, ืฉืื ืืื ืืื ืืืืื ืืืืคื ืืื:
ืืขืื: Xeon E5-2680 v4 @ 2.40GHz 64 ืคืชืืืื.
ืืืืจืื: 730 GB.
ืืจืกืช java: 1.8.0_111
ืืืื ื ืงืืืช ืืืคืชื ืืื ืืืืช ืื ืชืื ืื ืืืืืืืช ืฉืฆืจืื ืืงืจืื. ืืขืืืื ืืื ืฉืื ืืชื ืงืืจื ื ืชืื ืื ืืืืื ืฉืืืืงืืช ืืืื ื-HBase cache, ืื ืื ืืคืืื ืื ืืืืข ืืงืจืืื ืื-buff/cache ืฉื ืืขืจืืช ืืืคืขืื. ืื HBase ืืืจืืจืช ืืืื ืืงืฆื 40% ืืืืืืจืื ืืืื ื ืฉื ืงืจื BlockCache. ืืขืืงืจื ืฉื ืืืจ ืืื ConcurrentHashMap, ืืืฉืจ ืืืคืชื ืืื ืฉื ืืงืืืฅ + ืืืกื ืฉื ืืืืืง, ืืืขืจื ืืื ืื ืชืื ืื ืืคืืขื ืืืืกื ืืื.
ืืื, ืืฉืงืืจืืื ืจืง ืืืืื ื ืืื, ืื ืื ื
ืืืืืื, ืืืงืจื ืฉืื ื, ื ืคื BlockCache ื-RS ืืื ืืื ื-12 GB. ืื ืืชื ื ืฉื ื RS ืขื ืฆืืืช ืืื, ืืืืืจ. 96 GB ืืืงืฆืื ืขืืืจ BlockCache ืืื ืืฆืืชืื. ืืืฉ ืืจืื ืคืขืืื ืืืชืจ ื ืชืื ืื, ืืืฉื, ืชื ื ืืื ืืืืืช 4 ืืืืืืช, 130 ืืืืจืื ืื ืืืช, ืฉืืื ืงืืฆืื ืืืืื 800 ืืื-ืืืื, ืืืืกืื ืขื ืืื FAST_DIFF, ืืืืืจ. ืกื"ื 410 GB (ืืื ื ืชืื ืื ืืืืจืื, ืืืืืจ ืืื ืืงืืช ืืืฉืืื ืืช ืืืจื ืืฉืืคืื).
ืืคืืื, BlockCache ืืื ืจืง ื-23% ืื ืคื ืื ืชืื ืื ืืืืื ืืื ืืจืื ืืืชืจ ืงืจืื ืืชื ืืื ืืืืืชืืื ืฉื ืื ืฉื ืงืจื BigData. ืืืื ืืชืืื ืืืืฃ - ืื ืืจืืจ ืฉืืื ืฉืคืืืช ืื ืืกืืช ืืืืื, ืื ืืืืฆืืข ืืจืืข ืืืชืจ. ืืืจื ืืื, ืื ืชืคืกืคืกื, ืชืฆืืจืื ืืขืฉืืช ืืจืื ืขืืืื - ืืืืืจ. ืจื ืืคืื ืงืฆืืืช ืืขืจืืช ืืชืงืฉืจืืช. ืขื ืืืช, ืื ืืคืฉืจ ืืืืื ืข ืืื, ืื ืืืื ื ืกืชืื ืขื ืืืื ืืืจ ืืืืจื โ ืื ืงืืจื ืื ืชืื ืื ืืชืื ืืืืืื?
ืืืื ื ืคืฉื ืืช ืืืฆื ืื ื ืื ืฉืืฉ ืื ื ืืืืื ืฉืืชืืื ืจืง ืืืืืืืงื ืืื. ืื ื ืืืืื ืืื ืฉืืงืจื ืืืฉืจ ื ื ืกื ืืขืืื ืขื ื ืคื ื ืชืื ืื ืืืื ืคื 1 ืืืืืืื, ื ืฆืืจื:
1. ืืฆื ืืืืง 1 ืืืืืื
2. ืืกืจ ืืช ืืืืง 1 ืืืืืืื
3. ืืฆื ืืืืง 2 ืืืืืื
4. ืืกืจ ืืช ืืืืง 2 ืืืืืืื
5. ืืฆื ืืืืง 3 ืืืืืื
5 ืคืขืืืืช ืืืฉืืื! ืขื ืืืช, ืืฆื ืื ืื ืืืื ืืืืงืจื ื ืืจืืื; ืืืขืฉื, ืื ื ืืืืฆืื ืืช HBase ืืขืฉืืช ืืืืจื ืฉื ืขืืืื ืืกืจืช ืชืืขืืช ืืืืืืื. ืื ืื ืืืื ืงืืจื ื ืชืื ืื ืืืืืืื ืฉื ืืขืจืืช ืืืคืขืื, ืืืงื ืืืชื ื-BlockCache, ืจืง ืืื ืืืจืืง ืืืชื ืืืขื ืืื ืืืื ืฉืืืง ืืืฉ ืฉื ื ืชืื ืื ืืืืข. ืืื ืืืฆืื ืืชืืืืช ืืคืืกื ืืจืื ืืช ืืืืช ืืืขืื โ Garbage Collector ืืืจื ืืงื ื ืืืื, ืืืืืืจื ืืชืืืืช, ืืจืื ืืงืื ื ืืฉืืืื ืืจืืืงื ืืืืืืืช ืืชืขืฆืื ืช. ืืื ืื ื ืื ืฉื ื-IT ืืืฉ ืื ืืืืืื ืืฉืืืืื ืขืฆืืืื, ืื ืื ืื ื ืืชืืืืื ืืืฉืื ืื ืื ืื ื ืืืืืื ืืขืฉืืช ืื ืืืื.
ืื ืื ืื ืชืื ืืก ืืช ืื ืืืืืงืื ืืืืืื, ืืื ืจืง ืืืื ืืกืืื ืืื, ืืื ืฉืืืืืื ืื ืืขืื ืขื ืืืืชืื? ื ืชืืื ืืืืกืคืช ืจืง ืืื ืฉืืจืืช ืงืื ืืชืืืืช ืืคืื ืงืฆืื ืืืื ืกืช ื ืชืื ืื ื-BlockCache:
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
if (cacheDataBlockPercent != 100 && buf.getBlockType().isData()) {
if (cacheKey.getOffset() % 100 >= cacheDataBlockPercent) {
return;
}
}
...
ืื ืงืืื ืืื ืืื ืืืื: offset ืืื ืืืงืื ืืืืืง ืืงืืืฅ ืืืกืคืจืืช ืืืืจืื ืืช ืฉืื ืืคืืืจืืช ืืืืคื ืืงืจืื ืืฉืืื ืืื 00 ื-99. ืืื, ื ืืื ืจืง ืขื ืืื ืฉื ืืคืืื ืืืืื ืฉืื ื ืฆืจืืืื.
ืืืืืื, ืืืืจ cacheDataBlockPercent = 20 ืืจืื ืื ืงืืจื:
ืืชืืฆืื ืืจืืจื. ืืืจืคืื ืืืื, ืืชืืจืจ ืืืืข ืืชืจืืฉื ืืืฆื ืืื - ืื ื ืืืกืืื ืืฉืืื GC ืจืืื ืืืื ืืขืฉืืช ืืช ืืขืืืื ืืกืืืืคืืช ืฉื ืืฆืืช ื ืชืื ืื ืืืืืื ืจืง ืืื ืืืจืืง ืืืชื ืืื ืืืืืื ืฉื ืืืื ืืืืืื:
ืืืงืืื, ื ืืฆืื ืืืขืื ืขืืื, ืืื ืืื ืืจืื ืคืืืช ืืืคืจืืืืงืืืืืืช:
ืจืืื ืื ืืฆืืื ืฉืืืืืงืื ืืืืืืกื ืื ื-BlockCache ืฉืื ืื. ืจืืื, ื-95%, ืื ื ืชืื ืื ืขืฆืื. ืืืฉืืจ ืืื ืืื ื ืชืื ืื, ืืืื ืืกื ื ื Bloom ืื LEAF_INDEX ื
ืืื, ืืงืื ืื ื ืจืืืื ืชื ืื ืืืืงื buf.getBlockType().isData() ืืืืืืช ืืืื ืืื ื ืฉืืืจ ืืืชื ืืื ืืงืจื ืืืืืื.
ืขืืฉืื ืืืื ื ืืืื ืืช ืืขืืืก ืื ืืืง ืืขื ืืช ืืชืืื ื ืืืื ืืืช. ืืืืืงื ืืจืืฉืื ื ืขืฉืื ื ืืช ืืืื ืืืืชืื = 20 ืื-BlockCache ืืื ืืขื ืื ืื ืืฆื. ืขืืฉืื ืืืื ื ืืืืจ ืืช ืื ื-23% ืื ืืกืืฃ 100 ืฉืจืฉืืจืื ืื 5 ืืงืืช ืืื ืืจืืืช ืืืืื ื ืงืืื ืืชืจืืฉืช ืืจืืืื:
ืืื ืื ื ืจืืืื ืฉืืืจืกื ืืืงืืจืืช ืคืืืขืช ืืืขื ืืื ืืชืงืจื ืื-100 ืืืฃ ืืงืฉืืช ืืฉื ืืื. ืืืืื ืืชืืงืื ื ืืชื ืชืืืฆื ืฉื ืขื 300 ืืืฃ. ืืื ืขื ืืืช, ืืจืืจ ืฉืืืฆื ื ืืกืคืช ืืืจ ืื ืื ืื "ืืืคืฉืืช"; ืื ื ืืฆืื ืืืขืื ืขืืื.
ืขื ืืืช, ืื ืื ืคืชืจืื ืืืื ืื ืืืืืื, ืืืืืื ืฉืืื ื ื ืืืืขืื ืืจืืฉ ืืืื ืืืื ืืืืืืงืื ืฆืจืื ืืืืืช ืืืืื, ืื ืชืืื ืืคืจืืคืื ืืขืืืก. ืืื, ืืืฉื ืื ืื ืื ืืืชืืื ืืืืืืืืช ืฉื ืคืจืืืจ ืื ืืืชืื ืืคืขืืืืช ืคืขืืืืช ืืงืจืืื.
ืฉืืืฉ ืืคืฉืจืืืืช ื ืืกืคื ืืื ืืฉืืื ืืื:
hbase.lru.cache.heavy.viction.count.count - ืืืืืจ ืืื ืคืขืืื ืืชืืืื ืฉื ืคืื ืื ื ืชืื ืื ืืืืืืื ืฆืจืื ืืจืืฅ ืืคื ื ืฉื ืชืืื ืืืฉืชืืฉ ืืืืคืืืืืืฆืื (ืืืืืจ ืืืืื ืขื ืืืืงืื). ืืืจืืจืช ืืืื ืื ืฉืืื ื-MAX_INT = 2147483647 ืืืืขืฉื ืืืืจ ืฉืืชืืื ื ืืขืืื ืื ืชืชืืื ืืขืืื ืขื ืืขืจื ืืื. ืื ืชืืืื ืืคืื ืื ืืชืืื ืื 5 - 10 ืฉื ืืืช (ืื ืชืืื ืืขืืืก) ื 2147483647 * 10 / 60 / 60 / 24 / 365 = 680 ืฉื ืื. ืขื ืืืช, ืื ื ืืืืืื ืืืืืืจ ืคืจืืืจ ืื ื-0 ืืืืจืื ืืชืืื ื ืืขืืื ืืื ืืืืจ ืืืฉืงื.
ืขื ืืืช, ืืฉ ืื ืืืขื ืืคืจืืืจ ืื. ืื ืืขืืืก ืฉืื ื ืืื ืืื ืฉืงืจืืืืช ืงืฆืจืืช ืืืื (ื ื ืื ืืืืื ืืืื) ืืงืจืืืืช ืืจืืืืช ืืืื (ืืืืื) ืืคืืืจืืช ืื ืืืื, ืื ื ืืื ืืืืื ืฉืืคืืฆ'ืจ ืืืคืขื ืจืง ืืืฉืจ ืืชืืฆืขืืช ืคืขืืืืช ืงืจืืื ืืจืืืืช.
ืืืืืื, ืื ื ืืืืขืื ืฉืงืจืืืืช ืืืืื ืงืฆืจ ื ืืฉืืืช ืืืจื ืืื ืืืงื ืืืช. ืืื ืฆืืจื ืืืชืืื ืืืจืืง ืืืืงืื, ืืืืืื ืื ืืืื ืืื ืืืืืช ืืืืฉื ืืื ื ืืื ืืืืืืจ ืคืจืืืจ ืื ืฉืืื, ืืืฉื, ื-1. ืื ืืืืื ืืื ืฉืืืืคืืืืืืฆืื ืชืชืืื ืืขืืื ืจืง ืืืฉืจ ืืจืื- ืงืจืืื ืคืขืืื ืืืื ื ืืืื, ืืืืืจ. ืชืื 10 ืฉื ืืืช. ืืคืืื, ืื ืืฉ ืื ื ืงืจืืื ืืืืื ืงืฆืจ, ืื ืื ืืืืืงืื ืืืื ืกื ืืืืืื ืืืืื ืืืื ืื (ืืืขื ืืื ืฉืืกืืืงื ืขื ืืื ืืืืืืจืืชื ืืกืื ืืจืื). ืืืืฉืจ ืื ื ืขืืฉืื ืงืจืืื ืืืืื ืืจืื, ืืชืืื ื ืืืคืขืืช ืืืื ืื ื ืืืฆืืขืื ืืืืืื ืืืจืื.
hbase.lru.cache.heavy.eviction.mb.size.limit - ืืืืืจ ืืื ืืื-ืืืื ื ืจืฆื ืืืงื ืืืืืื (ืืืืืื, ืืคื ืืช) ืชืื 10 ืฉื ืืืช. ืืชืืื ื ืชื ืกื ืืืืืข ืืขืจื ืื ืืืฉืืืจ ืขืืื. ืื ืงืืื ืืื ืืื: ืื ื ืืืืฃ ื'ืืื-ืืืื ืืืืืื, ืื ื ืฆืืจื ืืคื ืืช ื'ืืื-ืืืื, ืืื, ืืคื ืฉืจืืื ื ืืืขืื, ืืงืจ ืืืื. ืขื ืืืช, ืื ืชื ืกื ืืืืืืจ ืืืชื ืงืื ืืื, ืืืืืื ืฉืืืืจ ืืืจืื ืืืฆืืื ืืืฆื ืืืืื ืืืืืง ืืืจื ืขืช. ืขืืืจ ืฉืจืชืื ืืืงืื (ื-20-40 ืืืืืช ืคืืืืืช), ืืืคืืืืื ืืืืืืจ ื-300-400 ืืื-ืืืื. ืืืขืื ืืืื ืืื (~10 ืืืืืช) 200-300 MB. ืขืืืจ ืืขืจืืืช ืืืฉืืช (2-5 ืืืืืช) 50-100 MB ืขืฉืื ืืืืืช ื ืืจืืื (ืื ื ืืืง ืขื ืืื).
ืืื ื ืกืชืื ืืื ืื ืขืืื: ื ื ืื ืฉืืืืจื ื hbase.lru.cache.heavy.eviction.mb.size.limit = 500, ืืฉ ืกืื ืฉื ืขืืืก (ืงืจืืื) ืืื ืื ~10 ืฉื ืืืช ืืืฉืืื ืืื ืืชืื ืืื ืคืื ื ืืืืฆืขืืช ืื ืืกืื:
ืชืงืืจื = ืกืืื ืืชืื ืืฉืืืจืจืื (MB) * 100 / ืืืืื (MB) - 100;
ืื ืืืขืฉื 2000 ืืื-ืืืื ืคืื ื, ืื ืชืงืืจื ืฉืืื ื:
2000 * 100 / 500 - 100 = 300%
ืืืืืืจืืชืืื ืื ืกืื ืืฉืืืจ ืขื ืื ืืืชืจ ืืืื ืขืฉืจืืช ืืืืืื, ืื ืฉืืชืืื ื ืชืคืืืช ืืช ืืืื ืืืืืงืื ืืืืืืกื ืื ืืืืืื, ืืืื ืชืืืืข ืื ืื ืื ืืืื ืื ืืืืืืื.
ืขื ืืืช, ืื ืืขืืืก ืืืจื, ื ื ืื ืฉืจืง 200 ืืื-ืืืื ืืคืื ื ืื-Overhead ืืืคื ืืฉืืืื (ืื ืฉื ืงืจื ืืจืืื):
200 * 100 / 500 - 100 = -60%
ืืืืคื, ืืชืืื ื ืชืืืื ืืช ืืืื ืืืกืืืืช ืืืืืืกื ืืช ืืืืืื ืขื ืฉื-Overhead ืืืคืื ืืืืืื.
ืืืื ืืืืื ืืืืคื ืฉืื ืื ื ืจืื ืื ืชืื ืื ืืืืชืืื. ืืื ืฆืืจื ืื ืกืืช ืืืืืข ื-0%, ืื ืืืชื ืืคืฉืจื. ืื ืืื ืืืื ืืืฉืจ ืืื ืืขืจื 30 - 100%, ืื ืขืืืจ ืืื ืืข ืืฆืืื ืืืงืืืช ืืืฆื ืืืืคืืืืืืฆืื ืืืืื ืขืืืืช ืงืฆืจืืช ืืืื.
hbase.lru.cache.heavy.viction.coefficient.heavy - ืงืืืข ืืื ืืืจ ื ืจืฆื ืืงืื ืืช ืืชืืฆืื. ืื ืื ืื ื ืืืืขืื ืืืืืืืช ืฉืืงืจืืื ืฉืื ื ืืื ืืจืื ืืจืืื ืืื ื ืจืฆื ืืืืืช, ื ืืื ืืืืืื ืืช ืืืืก ืืื ืืืืฉืื ืืืฆืืขืื ืืืืืื ืืืจ ืืืชืจ.
ืืืืืื, ืื ื ืงืืืขืื ืืช ืืืงืื ืืื = 0.01. ืืืฉืืขืืช ืืื ืฉ-Overhead (ืจืื ืืขืื) ืืืืคื ืืืกืคืจ ืื ืืชืืฆืื ืืืชืงืืืช ืืืืื ืืืืืงืื ืืืืืืกื ืื ืืืืืื ืืงืื. ื ื ืื ืฉ-Overhead = 300% ืืืงืื = 0.01, ืื ืืืื ืืืืืงืื ืืืืืืกื ืื ืืืืืื ืืงืื ื-3%.
ืืืืืื ืืืื ืฉื "ืืืฅ ืืืืจื" ืืืืฉื ืื ืขืืืจ ืขืจืื Overhead (ืืืชืืฃ ืืชืจ) ืฉืืืืืื. ืืืืืื ืฉืชื ืืืืช ืงืฆืจืืช ืืืื ืื ืคื ืืงืจืืื ืืืคืื ืื ืชืืื ืืคืฉืจืืืช, ืื ืื ืื ืื ืืืคืฉืจ ืื ืืืืื ืข ืืืฆืืื ืืืงืืืช ืืืฆื ืืืืคืืืืืืฆืื. ืืืืฅ ืืืืืจื ืืฉ ืืืืืื ืืคืื: ืืื ืฉืืคืจืืฆื ืืืงื ืืืชืจ, ืื ืืืชืจ ืืืืงืื ื ืฉืืจืื ืืืืืื.
ืงืื ืืืฉืื
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 ืืงืืช, ืืื ืืช Multi-gets (ื ืืชืจืช ืฉืื ืจืง ืกืจืืงื)
ืื ื ืืืฆืขืื ืฉืชื ืจืืฆืืช, ืจืืฉืืช hbase.lru.cache.heavy.eviction.count.limit = 10000 (ืื ืฉืืืขืฉื ืืฉืืืช ืืช ืืชืืื ื), ืืืืืจ ืืื ืืืืืจืื limit = 0 (ืืืคืฉืจ ืืืช).
ืืืืื ืื ืืืื ืื ื ืจืืืื ืืืฆื ืืชืืื ื ืืืคืขืืช ืืืืคืกืช ืืช ื-Overshoot ื-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
evicted (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
evicted (MB): 104, ืืืก 0.03, ืชืงืืจื (%): -48, ืืื ื ืคืื ืื ืืื: 47, ืืืืื ื ืืืื DataBlock (%): 21 < interrupt gets
ืคืื ืื (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), ืืืืคืฉืจ ืื ืืืฉืช ืืฉืืจืืช ืื ืชืื ืื, ืชืื ืืืื ืขืืช ืืืื ืืจืืงืฆืืืช ืืจืฉืช.
ืคืจืืคืื ืืจืื ืฉืืืจืืช ืฉืื ืื ืื ืื ื ืืชื ืจืืื ืืืื, ืืื ืื ืืืคื ืืฉืื ืืกืืื ืืฆืืืืจ ืืงืืืง, ืืืืืื ืฉืืืขื ืื ืืคืขืืืืช ืืืืืืช ืืชืจืืฉืืช ืืชืื ืื ืขืื, ืื ืฉืืืืื ืืืกืืื ืจืื ืืืื.
ืืืืจ ืฉืืื ื ืืืช, ืืื ื ืฉื ืืชื ืืขืงืืฃ ืืช ืืืขืื ืขื ืืื ืืฆืืจืช ืืขืจื ืฉื 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, ืืืฆื ืื ืื ืชืืื ืืืื ื. ืืื ืื ื "ืคืืชืืื" ืืช ืืืืืืช ืฉื ืืืขืื ืืขืฉืืช ืขืืืื ืืืชืจ, ืืืงืื ืืืืชืืืช ืขื ืื ืขืืืื.
ืืื ืืชื ืืืื ืืจืืืช ืฉืืืืคื ืืืื, ืืืืื ืืืกืคืจ ืืืืืื ืื ื ืืชื ืืืืื ืคืจืืคืืจืฆืืื ืื ืืขืจื ืื ืืฆืื ืืืขืื. ืขื ืืืช, ืืฉ ืืขื ืืืชืจ ืฉืืืืืื ืื ืฆืืื.
ืืืืืื, ืืืื ื ืกืชืื ืืงืจืื ืขื ืืืืืจื SSC = 3. ืืขืืืื ืืืืฆืืขืื ืืืืื ืืื ืืขืจื ืคื 3.3. ืืืื ืืชืืฆืืืช ืืื ืฉืืืฉ ืืจืืฆืืช ืื ืคืจืืืช.
ืืขืื ืฉืฆืจืืืช ืืืขืื ืขืืื ืคื 2.8 ืืขืจื. ืืืืื ืื ืืืื ืืืืืื, ืืื ืืจืื ืืงืื ื ืืืจ ืืืืฉืจืช ืืืืื ืืฉ ืื ืืื ืืืืช ืืืืช ืืกืคืจ ืืืืืื ืฉืืขืืจืื.
ืืคืืื, ืชืืื ืืื ืืฉืคืขื ืืืืืืช ืขื ืื ืืื ืฉืืฉืชืืฉ ืืืืฉื ืืชืคืืืจืช ื-HDFS (ืืืฉื Spark ืืื'), ืืชื ืื ืฉืงืื ืืืคืืืงืฆืื ืงื ืืฉืงื (ืืืืืจ ืืชืงืข ื ืืฆื ืืฆื ืืืงืื ืฉื HDFS) ืืืฉ ืืื ืืขืื ืคื ืื. . ืืื ืืืืืง, ืืืื ื ืืืืง ืืืื ืืฉืคืขื ืชืืื ืืฉืืืืฉ ืืืฉืืื ืืืืคืืืืืืฆืืืช BlockCache ืืืืื ืื SSC ืืงืจืืื ื-HBase.
ื ืืชื ืืจืืืช ืฉืืชื ืืื ืืืื ืืืฉืคืขื ืื ืืืืื ืืื ืืืืืงืืช ืืขืืื ืืช (ืงืจืืื ืืื ืื ืขืืืื), ืืื ืืืืื ืืคืฉืจ ืืกืืื ืืื 80K ื ืืกืคืื. ืืื, ืฉืชื ืืืืคืืืืืืฆืืืช ืืกืคืงืืช ืืืืจืืช ืฉื ืขื ืคื 4.
ืื ืขืืืจ ืืืคืืืืืืฆืื ืื ืืืฆืข ืืืกื ืฆืืืืจ
ืืืืกืืฃ, ืืื ืืขื ืืื ืืืฉืืืช ืืช ืืืฆืืขื ืืงืจืืื ืฉื ืืกื ื ืชืื ืื ืืืื ืืขื ืขืืืืืช ืจืืืืช, 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