ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื”ื ืื—ืช ื”ื“ืจื™ืฉื•ืช ื”ืžืจื›ื–ื™ื•ืช ื‘ืขื‘ื•ื“ื” ืขื ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื. ื‘ืžื—ืœืงืช ื˜ืขื™ื ืช ื”ื ืชื•ื ื™ื ื‘-Sberbank, ืื ื• ืฉื•ืื‘ื™ื ื›ืžืขื˜ ืืช ื›ืœ ื”ืขืกืงืื•ืช ืœืชื•ืš ื”-Data Cloud ื”ืžื‘ื•ืกืก ืขืœ Hadoop ื•ืœื›ืŸ ืžืชืžื•ื“ื“ื™ื ืขื ื–ืจื™ืžื•ืช ืžื™ื“ืข ื’ื“ื•ืœื•ืช ื‘ืืžืช. ื‘ืื•ืคืŸ ื˜ื‘ืขื™, ืื ื—ื ื• ืชืžื™ื“ ืžื—ืคืฉื™ื ื“ืจื›ื™ื ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื, ื•ืขื›ืฉื™ื• ืื ื—ื ื• ืจื•ืฆื™ื ืœืกืคืจ ืœื›ื ืื™ืš ื”ืฆืœื—ื ื• ืœืชืงืŸ ืืช RegionServer HBase ื•ืืช ืœืงื•ื— HDFS, ืฉื‘ื–ื›ื•ืชื ื”ืฆืœื—ื ื• ืœื”ื’ื‘ื™ืจ ืžืฉืžืขื•ืชื™ืช ืืช ืžื”ื™ืจื•ืช ืคืขื•ืœื•ืช ื”ืงืจื™ืื”.
ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ืขื ื–ืืช, ืœืคื ื™ ืฉืขื•ื‘ืจื™ื ืœืžื”ื•ืช ื”ืฉื™ืคื•ืจื™ื, ื›ื“ืื™ ืœื“ื‘ืจ ืขืœ ื”ื’ื‘ืœื•ืช ืฉื‘ืื•ืคืŸ ืขืงืจื•ื ื™ ืœื ื ื™ืชืŸ ืœืขืงื•ืฃ ืื ื™ื•ืฉื‘ื™ื ืขืœ ื“ื™ืกืง ืงืฉื™ื—.

ืžื“ื•ืข 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, ืื‘ืœ ื–ื” ืžืงืกื™ืžื•ื ืฉืœ ื›ืžื” ืขืฉืจื•ืช ืื—ื•ื–ื™ื:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื‘ื“ื™ืงื•ืช ื‘ื•ืฆืขื• ืขืœ 100 ืงื‘ืฆื™ื, ื›ืœ ืื—ื“ ื‘ื’ื•ื“ืœ 1 GB ื•ืžืžื•ืงื ืขืœ 10 ื“ื™ืกืงื™ื ืงืฉื™ื—ื™ื.

ื‘ื•ืื• ืœื—ืฉื‘ ืขืœ ืžื” ืื ื—ื ื• ื™ื›ื•ืœื™ื, ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืœืกืžื•ืš ื‘ืžื”ื™ืจื•ืช ื”ื–ื•:
ื ื ื™ื— ืฉืื ื• ืงื•ืจืื™ื ืž-10 ื“ื™ืกืงื™ื ื‘ืžื”ื™ืจื•ืช ืฉืœ 280 ืžื’ื”-ื‘ื™ื™ื˜/ืฉื ื™ื™ื”, ื›ืœื•ืžืจ. 3 ืžื™ืœื™ื•ืŸ ื›ืคื•ืœ 100 ื‘ื™ื™ื˜ื™ื. ืื‘ืœ ื›ื–ื›ื•ืจ, ื”ื ืชื•ื ื™ื ืฉืื ื• ืฆืจื™ื›ื™ื ื”ื ืคื™ 2600 ืคื—ื•ืช ืžืžื” ืฉื ืงืจื. ืœืคื™ื›ืš, ืื ื• ืžื—ืœืงื™ื 3 ืžื™ืœื™ื•ืŸ ื‘-2600 ื•ืžืงื‘ืœื™ื 1100 ืจืฉื•ืžื•ืช ื‘ืฉื ื™ื™ื”.

ืžื“ื›ื, ืœื? ื–ื” ื”ื˜ื‘ืข ื’ื™ืฉื” ืืงืจืื™ืช ื’ื™ืฉื” ืœื ืชื•ื ื™ื ื‘-HDD - ืœืœื ืงืฉืจ ืœื’ื•ื“ืœ ื”ื‘ืœื•ืง. ื–ื•ื”ื™ ื”ืžื’ื‘ืœื” ื”ืคื™ื–ื™ืช ืฉืœ ื’ื™ืฉื” ืืงืจืื™ืช ื•ืืฃ ืžืกื“ ื ืชื•ื ื™ื ืœื ื™ื›ื•ืœ ืœืกื—ื•ื˜ ื™ื•ืชืจ ื‘ืชื ืื™ื ื›ืืœื”.

ื›ื™ืฆื“ ืื ื›ืŸ ืžืกื“ื™ ื ืชื•ื ื™ื ืžืฉื™ื’ื™ื ืžื”ื™ืจื•ื™ื•ืช ื’ื‘ื•ื”ื•ืช ื‘ื”ืจื‘ื”? ื›ื“ื™ ืœืขื ื•ืช ืขืœ ืฉืืœื” ื–ื•, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืžื” ืฉืงื•ืจื” ื‘ืชืžื•ื ื” ื”ื‘ืื”:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื›ืืŸ ืื ื• ืจื•ืื™ื ืฉื‘ื“ืงื•ืช ื”ืจืืฉื•ื ื•ืช ื”ืžื”ื™ืจื•ืช ื”ื™ื ื‘ืืžืช ื›ืืœืฃ ืฉื™ืื™ื ื‘ืฉื ื™ื™ื”. ืขื ื–ืืช, ื‘ื ื•ืกืฃ, ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื ืงืจื ื”ืจื‘ื” ื™ื•ืชืจ ืžืžื” ืฉื”ืชื‘ืงืฉ, ื”ื ืชื•ื ื™ื ืžื’ื™ืขื™ื ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœ-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 ื•ืจืื” ืžื” ืงื•ืจื”:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื”ืชื•ืฆืื” ื‘ืจื•ืจื”. ื‘ื’ืจืคื™ื ืœืžื˜ื”, ืžืชื‘ืจืจ ืžื“ื•ืข ื”ืชืจื—ืฉื” ื”ืืฆื” ื›ื–ื• - ืื ื• ื—ื•ืกื›ื™ื ืžืฉืื‘ื™ GC ืจื‘ื™ื ืžื‘ืœื™ ืœืขืฉื•ืช ืืช ื”ืขื‘ื•ื“ื” ื”ืกื™ื–ื™ืคื™ืช ืฉืœ ื”ืฆื‘ืช ื ืชื•ื ื™ื ื‘ืžื˜ืžื•ืŸ ืจืง ื›ื“ื™ ืœื–ืจื•ืง ืื•ืชื ืžื™ื“ ืœื˜ืžื™ื•ืŸ ืฉืœ ื›ืœื‘ื™ ื”ืžืื“ื™ื:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื‘ืžืงื‘ื™ืœ, ื ื™ืฆื•ืœ ื”ืžืขื‘ื“ ืขื•ืœื”, ืื‘ืœ ื”ื•ื ื”ืจื‘ื” ืคื—ื•ืช ืžื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ืจืื•ื™ ื’ื ืœืฆื™ื™ืŸ ืฉื”ื‘ืœื•ืงื™ื ื”ืžืื•ื—ืกื ื™ื ื‘-BlockCache ืฉื•ื ื™ื. ืจื•ื‘ื, ื›-95%, ื”ื ื ืชื•ื ื™ื ืขืฆืžื. ื•ื”ืฉืืจ ื”ื•ื ืžื˜ื ื ืชื•ื ื™ื, ื›ื’ื•ืŸ ืžืกื ื ื™ Bloom ืื• LEAF_INDEX ื• ั‚.ะด.. ื”ื ืชื•ื ื™ื ื”ืืœื” ืœื ืžืกืคื™ืงื™ื, ืื‘ืœ ื”ื ืžืื•ื“ ืฉื™ืžื•ืฉื™ื™ื, ื›ื™ ืœืคื ื™ ื’ื™ืฉื” ื™ืฉื™ืจื” ืœื ืชื•ื ื™ื, HBase ืคื•ื ื” ืœืžื˜ื ื›ื“ื™ ืœื”ื‘ื™ืŸ ื”ืื ื™ืฉ ืฆื•ืจืš ืœื—ืคืฉ ื›ืืŸ ื™ื•ืชืจ ื•ืื ื›ืŸ ื”ื™ื›ืŸ ื‘ื“ื™ื•ืง ื ืžืฆื ื’ื•ืฉ ื”ืขื ื™ื™ืŸ.

ืœื›ืŸ, ื‘ืงื•ื“ ืื ื• ืจื•ืื™ื ืชื ืื™ ื‘ื“ื™ืงื” buf.getBlockType().isData() ื•ื‘ื–ื›ื•ืช ื”ืžื˜ื ื”ื–ื” ื ืฉืื™ืจ ืื•ืชื• ื‘ื›ืœ ืžืงืจื” ื‘ืžื˜ืžื•ืŸ.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื’ื“ื™ืœ ืืช ื”ืขื•ืžืก ื•ื ื—ื–ืง ืžืขื˜ ืืช ื”ืชื›ื•ื ื” ื‘ืžื›ื” ืื—ืช. ื‘ื‘ื“ื™ืงื” ื”ืจืืฉื•ื ื” ืขืฉื™ื ื• ืืช ืื—ื•ื– ื”ื—ื™ืชื•ืš = 20 ื•ื”-BlockCache ื”ื™ื” ืžืขื˜ ืœื ืžื ื•ืฆืœ. ืขื›ืฉื™ื• ื‘ื•ืื• ื ื’ื“ื™ืจ ืืช ื–ื” ืœ-23% ื•ื ื•ืกื™ืฃ 100 ืฉืจืฉื•ืจื™ื ื›ืœ 5 ื“ืงื•ืช ื›ื“ื™ ืœืจืื•ืช ื‘ืื™ื–ื• ื ืงื•ื“ื” ืžืชืจื—ืฉืช ื”ืจื•ื•ื™ื”:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 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 (ื—ื™ืชื•ืฃ ื™ืชืจ) ืฉืœื™ืœื™ื™ื. ืžื›ื™ื•ื•ืŸ ืฉืชื ื•ื“ื•ืช ืงืฆืจื•ืช ื˜ื•ื•ื— ื‘ื ืคื— ื”ืงืจื™ืื” ื•ื”ืคื™ื ื•ื™ ืชืžื™ื“ ืืคืฉืจื™ื•ืช, ืžื ื’ื ื•ืŸ ื–ื” ืžืืคืฉืจ ืœืš ืœื”ื™ืžื ืข ืžื™ืฆื™ืื” ืžื•ืงื“ืžืช ืžืžืฆื‘ ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”. ืœืœื—ืฅ ื”ืื—ื•ืจื™ ื™ืฉ ื”ื™ื’ื™ื•ืŸ ื”ืคื•ืš: ื›ื›ืœ ืฉื”ืคืจื™ืฆื” ื—ื–ืงื” ื™ื•ืชืจ, ื›ืš ื™ื•ืชืจ ื‘ืœื•ืงื™ื ื ืฉืžืจื™ื ื‘ืžื˜ืžื•ืŸ.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ืงื•ื“ ื™ื™ืฉื•ื

        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;
       }

ื”ื‘ื” ื ืกืชื›ืœ ื›ืขืช ืขืœ ื›ืœ ื–ื” ื‘ืืžืฆืขื•ืช ื“ื•ื’ืžื” ืืžื™ืชื™ืช. ื™ืฉ ืœื ื• ืืช ืชืกืจื™ื˜ ื”ื‘ื“ื™ืงื” ื”ื‘ื:

  1. ื‘ื•ืื• ื ืชื—ื™ืœ ืœืขืฉื•ืช ืกืจื™ืงื” (25 ืฉืจืฉื•ืจื™ื, ืืฆื•ื•ื” = 100)
  2. ืœืื—ืจ 5 ื“ืงื•ืช, ื”ื•ืกืฃ ืจื™ื‘ื•ื™ ื ืงื•ื“ื•ืช (25 ืฉืจืฉื•ืจื™ื, ืืฆื•ื•ื” = 100)
  3. ืœืื—ืจ 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 ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื•ืœื‘ืกื•ืฃ, ืื™ืš ื ืจืื™ืช ืคืขื•ืœืช ื”ืคืจืžื˜ืจื™ื ื‘ืฆื•ืจื” ืฉืœ ื’ืจืฃ. ืœืฉื ื”ืฉื•ื•ืื”, ื”ืžื˜ืžื•ืŸ ื”ื™ื” ื›ื‘ื•ื™ ืœื—ืœื•ื˜ื™ืŸ ื‘ื”ืชื—ืœื”, ืœืื—ืจ ืžื›ืŸ ื”ื•ืฉืง HBase ืขื ืฉืžื™ืจื” ื‘ืžื˜ืžื•ืŸ ื•ืขื™ื›ื•ื‘ ืชื—ื™ืœืช ืขื‘ื•ื“ืช ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘-5 ื“ืงื•ืช (30 ืžื—ื–ื•ืจื™ ืคื™ื ื•ื™).

ื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ืงื•ื“ ื”ืžืœื ื‘-Pull Request HBASE 23887 ื‘-github.

ืขื ื–ืืช, 300 ืืœืฃ ืงืจื™ืื•ืช ื‘ืฉื ื™ื™ื” ื–ื” ืœื ื›ืœ ืžื” ืฉื ื™ืชืŸ ืœื”ืฉื™ื’ ื‘ื—ื•ืžืจื” ื–ื• ื‘ืชื ืื™ื ืืœื”. ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉื›ืืฉืจ ืืชื” ืฆืจื™ืš ืœื’ืฉืช ืœื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช HDFS, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžื ื’ื ื•ืŸ ShortCircuitCache (ืœื”ืœืŸ SSC), ื”ืžืืคืฉืจ ืœืš ืœื’ืฉืช ื™ืฉื™ืจื•ืช ืœื ืชื•ื ื™ื, ืชื•ืš ื”ื™ืžื ืขื•ืช ืžืื™ื ื˜ืจืืงืฆื™ื•ืช ื‘ืจืฉืช.

ืคืจื•ืคื™ืœ ื”ืจืื” ืฉืœืžืจื•ืช ืฉืžื ื’ื ื•ืŸ ื–ื” ื ื•ืชืŸ ืจื•ื•ื— ื’ื“ื•ืœ, ื”ื•ื ื’ื ื”ื•ืคืš ื‘ืฉืœื‘ ืžืกื•ื™ื ืœืฆื•ื•ืืจ ื‘ืงื‘ื•ืง, ืžื›ื™ื•ื•ืŸ ืฉื›ืžืขื˜ ื›ืœ ื”ืคืขื•ืœื•ืช ื”ื›ื‘ื“ื•ืช ืžืชืจื—ืฉื•ืช ื‘ืชื•ืš ืžื ืขื•ืœ, ืžื” ืฉืžื•ื‘ื™ืœ ืœื—ืกื™ืžื” ืจื•ื‘ ื”ื–ืžืŸ.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ืœืื—ืจ ืฉื”ื‘ื ื• ื–ืืช, ื”ื‘ื ื• ืฉื ื™ืชืŸ ืœืขืงื•ืฃ ืืช ื”ื‘ืขื™ื” ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืžืขืจืš ืฉืœ 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 ื‘ื™ื—ืก ืœืžืงืจื” ื›ืืฉืจ ื™ืฉ ืจืง ืžื˜ืžื•ืŸ ืื—ื“.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื›ื™ืฆื“ ืœืงืจื•ื ืืช ื”ื’ืจืฃ: ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ 100 ืืœืฃ ืงืจื™ืื” ื‘ื‘ืœื•ืงื™ื ืฉืœ 64 KB ืขื ืžื˜ืžื•ืŸ ืื—ื“ ื“ื•ืจืฉ 78 ืฉื ื™ื•ืช. ื•ืื™ืœื• ืขื 5 ืžื˜ืžื•ื ื™ื ื–ื” ืœื•ืงื— 16 ืฉื ื™ื•ืช. ื”ึธื”ึตืŸ. ื™ืฉ ืชืื•ืฆื” ืฉืœ ~5 ืคืขืžื™ื. ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืžื”ื’ืจืฃ, ื”ื”ืฉืคืขื” ืื™ื ื” ื‘ื•ืœื˜ืช ื‘ืžื™ื•ื—ื“ ืœืžืกืคืจ ืงื˜ืŸ ืฉืœ ืงืจื™ืื•ืช ืžืงื‘ื™ืœื•ืช, ื”ื™ื ืžืชื—ื™ืœื” ืœืžืœื ืชืคืงื™ื“ ื‘ื•ืœื˜ ื›ืืฉืจ ื™ืฉ ื™ื•ืชืจ ืž-50 ืงืจื™ืื•ืช ืคืชื™ืœ. ื ื™ืชืŸ ื’ื ืœื”ื‘ื—ื™ืŸ ื›ื™ ื”ื’ื“ืœืช ืžืกืคืจ SSCs ืž-6 ื•ืžืขืœื” ื ื•ืชืŸ ืขืœื™ื™ืช ื‘ื™ืฆื•ืขื™ื ืงื˜ื ื” ืžืฉืžืขื•ืชื™ืช.

ื”ืขืจื” 1: ืžื›ื™ื•ื•ืŸ ืฉืชื•ืฆืื•ืช ื”ื‘ื“ื™ืงื” ื ื“ื™ืคื•ืช ืœืžื“ื™ (ืจืื” ืœื”ืœืŸ), ื‘ื•ืฆืขื• 3 ืจื™ืฆื•ืช ื•ื”ืขืจื›ื™ื ื”ืžืชืงื‘ืœื™ื ืžืžื•ืฆืขื™ื.

ื”ืขืจื” 2: ืจื•ื•ื— ื”ื‘ื™ืฆื•ืขื™ื ืžื”ื’ื“ืจืช ื’ื™ืฉื” ืืงืจืื™ืช ื–ื”ื”, ืื ื›ื™ ื”ื’ื™ืฉื” ืขืฆืžื” ืžืขื˜ ืื™ื˜ื™ืช ื™ื•ืชืจ.

ืขื ื–ืืช, ื™ืฉ ืœื”ื‘ื”ื™ืจ ืฉื‘ื ื™ื’ื•ื“ ืœืžืงืจื” ืขื HBase, ื”ืืฆื” ื–ื• ืœื ืชืžื™ื“ ื‘ื—ื™ื ื. ื›ืืŸ ืื ื• "ืคื•ืชื—ื™ื" ืืช ื”ื™ื›ื•ืœืช ืฉืœ ื”ืžืขื‘ื“ ืœืขืฉื•ืช ืขื‘ื•ื“ื” ื™ื•ืชืจ, ื‘ืžืงื•ื ืœื”ื™ืชืœื•ืช ืขืœ ืžื ืขื•ืœื™ื.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื‘ืื•ืคืŸ ื›ืœืœื™, ื’ื™ื“ื•ืœ ื‘ืžืกืคืจ ื”ืžื˜ืžื•ื ื™ื ื ื•ืชืŸ ื’ื™ื“ื•ืœ ืคืจื•ืคื•ืจืฆื™ื•ื ืœื™ ื‘ืขืจืš ื‘ื ื™ืฆื•ืœ ื”ืžืขื‘ื“. ืขื ื–ืืช, ื™ืฉ ืžืขื˜ ื™ื•ืชืจ ืฉื™ืœื•ื‘ื™ื ืžื ืฆื—ื™ื.

ืœื“ื•ื’ืžื”, ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื”ื”ื’ื“ืจื” SSC = 3. ื”ืขืœื™ื™ื” ื‘ื‘ื™ืฆื•ืขื™ื ื‘ื˜ื•ื•ื— ื”ื™ื ื‘ืขืจืš ืคื™ 3.3. ืœื”ืœืŸ ื”ืชื•ืฆืื•ืช ืžื›ืœ ืฉืœื•ืฉ ื”ืจื™ืฆื•ืช ื”ื ืคืจื“ื•ืช.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื‘ืขื•ื“ ืฉืฆืจื™ื›ืช ื”ืžืขื‘ื“ ืขื•ืœื” ืคื™ 2.8 ื‘ืขืจืš. ื”ื”ื‘ื“ืœ ืœื ื’ื“ื•ืœ ื‘ืžื™ื•ื—ื“, ืื‘ืœ ื’ืจื˜ื” ื”ืงื˜ื ื” ื›ื‘ืจ ืžืื•ืฉืจืช ื•ืื•ืœื™ ื™ืฉ ืœื” ื–ืžืŸ ืœืœื›ืช ืœื‘ื™ืช ื”ืกืคืจ ื•ืœืœืžื•ื“ ืฉื™ืขื•ืจื™ื.

ืœืคื™ื›ืš, ืชื”ื™ื” ืœื›ืš ื”ืฉืคืขื” ื—ื™ื•ื‘ื™ืช ืขืœ ื›ืœ ื›ืœื™ ืฉืžืฉืชืžืฉ ื‘ื’ื™ืฉื” ื‘ืชืคื–ื•ืจืช ืœ-HDFS (ืœืžืฉืœ Spark ื•ื›ื•'), ื‘ืชื ืื™ ืฉืงื•ื“ ื”ืืคืœื™ืงืฆื™ื” ืงืœ ืžืฉืงืœ (ื›ืœื•ืžืจ ื”ืชืงืข ื ืžืฆื ื‘ืฆื“ ื”ืœืงื•ื— ืฉืœ HDFS) ื•ื™ืฉ ื›ื•ื— ืžืขื‘ื“ ืคื ื•ื™. . ื›ื“ื™ ืœื‘ื“ื•ืง, ื‘ื•ืื• ื ื‘ื“ื•ืง ืื™ื–ื• ื”ืฉืคืขื” ืชื”ื™ื” ืœืฉื™ืžื•ืฉ ื”ืžืฉื•ืœื‘ ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื™ืช BlockCache ื•ื›ื•ื•ื ื•ืŸ SSC ืœืงืจื™ืื” ืž-HBase.

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื ื™ืชืŸ ืœืจืื•ืช ืฉื‘ืชื ืื™ื ื›ืืœื” ื”ื”ืฉืคืขื” ืœื ื’ื“ื•ืœื” ื›ืžื• ื‘ื‘ื“ื™ืงื•ืช ืžืขื•ื“ื ื•ืช (ืงืจื™ืื” ืœืœื ื›ืœ ืขื™ื‘ื•ื“), ืื‘ืœ ื‘ื”ื—ืœื˜ ืืคืฉืจ ืœืกื—ื•ื˜ ื›ืืŸ 80K ื ื•ืกืคื™ื. ื™ื—ื“, ืฉืชื™ ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืžืกืคืงื•ืช ืžื”ื™ืจื•ืช ืฉืœ ืขื“ ืคื™ 4.

ื’ื ืขื‘ื•ืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื–ื• ื‘ื•ืฆืข ื™ื—ืกื™ ืฆื™ื‘ื•ืจ [HDFS-15202], ืืฉืจ ืžื•ื–ื’ื” ื•ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ืชื”ื™ื” ื–ืžื™ื ื” ื‘ืžื”ื“ื•ืจื•ืช ืขืชื™ื“ื™ื•ืช.

ื•ืœื‘ืกื•ืฃ, ื”ื™ื” ืžืขื ื™ื™ืŸ ืœื”ืฉื•ื•ืช ืืช ื‘ื™ืฆื•ืขื™ ื”ืงืจื™ืื” ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ื“ื•ืžื” ื‘ืขืœ ืขืžื•ื“ื•ืช ืจื—ื‘ื•ืช, 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:

ื›ื™ืฆื“ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ืž-HBase ืขื“ ืคื™ 3 ื•ืž-HDFS ืขื“ ืคื™ 5

ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืืœื• ืžืืคืฉืจื•ืช ืœื”ืฉื•ื•ืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžืกื“ื™ ื ืชื•ื ื™ื ืืœื• ื‘ืชื ืื™ื ืืœื• ื•ืœื”ืฉื™ื’ 450 ืืœืฃ ืงืจื™ืื” ื‘ืฉื ื™ื™ื”.

ืื ื• ืžืงื•ื•ื™ื ืฉืžื™ื“ืข ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ืœืžื™ืฉื”ื• ื‘ืžื”ืœืš ื”ืžืื‘ืง ื”ืžืจื’ืฉ ืขืœ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”