ʻO ka hana kiʻekiʻe kekahi o nā koi koʻikoʻi i ka wā e hana ai me ka ʻikepili nui. Ma ke keʻena hoʻoili ʻikepili ma Sberbank, hoʻopili mākou i nā hana āpau i kā mākou Hadoop-based Data Cloud a no laila e hana i nā kahe nui o ka ʻike. Ma keʻano maoli, ke ʻimi mau nei mākou i nā ala e hoʻomaikaʻi ai i ka hana, a i kēia manawa makemake mākou e haʻi iā ʻoe pehea mākou i hoʻokele ai i ka RegionServer HBase a me ka mea kūʻai aku HDFS, mahalo i hiki iā mākou ke hoʻonui nui i ka wikiwiki o nā hana heluhelu.
Eia nō naʻe, ma mua o ka neʻe ʻana i ke ʻano o ka hoʻomaikaʻi ʻana, pono e kamaʻilio e pili ana i nā mea paʻa, ma ke kumu, ʻaʻole hiki ke hoʻopuni ʻia inā ʻoe e noho ma kahi HDD.
No ke aha ʻaʻole kūpono ka HDD a me ka heluhelu Random Access wikiwiki
E like me kāu e ʻike ai, HBase, a me nā ʻikepili ʻē aʻe he nui, e mālama i ka ʻikepili i loko o nā poloka o nā ʻumi kilobytes ka nui. ʻO ka maʻamau ma kahi o 64 KB. I kēia manawa, e noʻonoʻo kākou he 100 paita wale nō a noi mākou iā HBase e hāʻawi iā mākou i kēia ʻikepili me ka hoʻohana ʻana i kekahi kī. No ka mea he 64 KB ka nui o ka poloka ma HFiles, ʻoi aku ka nui o ka noi i 640 manawa (hoʻokahi minuke wale nō!) Ma mua o ka pono.
Ma hope aʻe, no ka mea e hele ana ka noi ma HDFS a me kāna ʻōnaehana caching metadata ShortCircuitCache (ʻo ia ka mea e hiki ai ke komo pololei i nā faila), alakaʻi kēia i ka heluhelu ʻana i ka 1 MB mai ka disk. Eia naʻe, hiki ke hoʻoponopono ʻia kēia me ka ʻāpana dfs.client.read.shortcircuit.buffer.size a i nā manawa he nui ke kūpono e hoʻemi i kēia waiwai, no ka laʻana i 126 KB.
E ʻōlelo mākou e hana mākou i kēia, akā ʻo ka mea hou, ke hoʻomaka mākou e heluhelu i ka ʻikepili ma o ka java api, e like me nā hana e like me FileChannel.read a noi i ka ʻōnaehana hana e heluhelu i ka nui o ka ʻikepili, heluhelu ia "i ka hihia" 2 mau manawa hou aku. , i.e. 256 KB i kā mākou hihia. No ka mea, ʻaʻohe ala maʻalahi o java e hoʻonohonoho i ka hae FADV_RANDOM e pale i kēia ʻano.
ʻO ka hopena, e kiʻi i kā mākou 100 bytes, 2600 mau manawa i heluhelu ʻia ma lalo o ka pā. Me he mea lā ua maopopo ka hopena, e hoʻemi kākou i ka nui o ka poloka i ka kilobyte, e hoʻonoho i ka hae i ʻōlelo ʻia a loaʻa i ka wikiwiki hoʻomālamalama. Akā ʻo ka pilikia ʻo ia ma ka hōʻemi ʻana i ka nui o ka poloka i 2 mau manawa, hoʻemi pū mākou i ka helu o nā bytes i heluhelu ʻia i kēlā me kēia ʻāpana o ka manawa e 2 mau manawa.
Hiki ke loaʻa kekahi mau waiwai mai ka hoʻonohonoho ʻana i ka hae FADV_RANDOM, akā me ka nui o nā threading kiʻekiʻe a me ka nui o ka poloka o 128 KB, akā ʻo kēia ka mea kiʻekiʻe o ʻelua mau ʻumi pakeneka:
Ua hana ʻia nā hoʻāʻo ma nā faila 100, kēlā me kēia 1 GB ka nui a aia ma 10 HDDs.
E helu kāua i ka mea hiki iā mākou, ma ke kumu, e helu i kēia wikiwiki:
E ʻōlelo mākou ua heluhelu mākou mai 10 disks i ka wikiwiki o 280 MB/sec, ʻo ia. 3 miliona manawa 100 bytes. Akā, e like me kā mākou e hoʻomanaʻo nei, ʻo ka ʻikepili e pono ai mākou he 2600 mau manawa ma mua o ka mea i heluhelu ʻia. No laila, puunaue mākou i 3 miliona me 2600 a loaʻa 1100 mau mooolelo i kekona.
Ke kaumaha, ʻaʻole anei? ʻO ia ke ʻano Ke kiʻi kaulele komo i ka ʻikepili ma ka HDD - me ka nānā ʻole i ka nui o ka poloka. ʻO kēia ka palena kino o ka loaʻa ʻole a ʻaʻohe waihona e hiki ke ʻoki hou aʻe ma lalo o ia mau kūlana.
A laila, pehea ka loaʻa ʻana o nā ʻikepili i nā wikiwiki kiʻekiʻe? No ka pane ʻana i kēia nīnau, e nānā kākou i ka mea e hana nei ma ke kiʻi aʻe.
Maʻaneʻi mākou e ʻike ai no nā minuke mua loa ʻo ka wikiwiki ma kahi o hoʻokahi kaukani moʻolelo i kekona. Eia naʻe, ma muli o ka nui o ka heluhelu ʻana ma mua o ka mea i noi ʻia, ua pau ka ʻikepili i ka buff/cache o ka ʻōnaehana hana (linux) a piʻi ka wikiwiki i kahi 60 tausani mau kekona.
No laila, e hana hou mākou me ka wikiwiki o ka loaʻa ʻana i ka ʻikepili i loko o ka cache OS a i ʻole i loko o nā polokalamu mālama SSD/NVMe o ka wikiwiki hiki ke hoʻohālikelike.
I kā mākou hihia, e hana mākou i nā hoʻokolohua ma kahi papa o nā kikowaena 4, e uku ʻia kēlā me kēia:
CPU: Xeon E5-2680 v4 @ 2.40GHz 64 pae.
Hoʻomanaʻo: 730 GB.
java mana: 1.8.0_111
A eia ke kumu nui o ka nui o ka ikepili ma na papa e pono e heluhelu. ʻO ka mea ʻoiaʻiʻo inā heluhelu ʻoe i ka ʻikepili mai kahi papaʻaina i waiho piha ʻia i ka cache HBase, a laila ʻaʻole ia e hele mai i ka heluhelu ʻana mai ka buff/cache o ka ʻōnaehana hana. No ka mea, hoʻokaʻawale ʻo HBase i ka 40% o ka hoʻomanaʻo i kahi hale i kapa ʻia ʻo BlockCache. ʻO ka mea nui he ConcurrentHashMap kēia, kahi o ke kī i ka inoa file + offset o ka poloka, a ʻo ka waiwai ka ʻikepili maoli ma kēia offset.
No laila, i ka heluhelu wale ʻana mai kēia hale, mākou
No ka laʻana, i kā mākou hihia, ʻo ka nui o BlockCache ma kahi RS ma kahi o 12 GB. Ua pae mākou i ʻelua RS ma hoʻokahi node, ʻo ia hoʻi. Hāʻawi ʻia ʻo 96 GB no BlockCache ma nā node āpau. A he nui nā manawa hou aku i ka ʻikepili, no ka laʻana, e waiho i 4 mau papa, 130 mau ʻāpana i kēlā me kēia, kahi o nā faila he 800 MB ka nui, i hoʻopaʻa ʻia e FAST_DIFF, ʻo ia. ka huina o 410 GB (ʻo ia ka ʻikepili maʻemaʻe, ʻo ia hoʻi me ka ʻole o ka noʻonoʻo ʻana i ka helu replication).
No laila, ʻo BlockCache wale nō ma kahi o 23% o ka nui o ka ʻikepili a ua kokoke loa kēia i nā kūlana maoli o ka mea i kapa ʻia ʻo BigData. A eia kahi e hoʻomaka ai ka leʻaleʻa - no ka mea, ʻoi aku ka liʻiliʻi o ka cache, ʻoi aku ka maikaʻi o ka hana. Ma hope o nā mea a pau, inā e poina ʻoe, pono ʻoe e hana i nā hana he nui - ʻo ia. e iho i ke kelepona ʻana i nā hana ʻōnaehana. Eia naʻe, ʻaʻole hiki ke pale ʻia kēia, no laila e nānā kākou i kahi ʻano ʻokoʻa loa - he aha ka hopena i ka ʻikepili i loko o ka cache?
E hoʻomaʻamaʻa mākou i ke kūlana a manaʻo mākou he huna huna i kūpono i 1 mea wale nō. Eia kekahi laʻana o ka mea e hiki mai ana ke hoʻāʻo mākou e hana me ka leo ʻikepili 3 mau manawa ʻoi aku ka nui ma mua o ka cache, pono mākou e:
1. E kau i ka poloka 1 ma kahi huna
2. Wehe i ka poloka 1 mai ka huna huna
3. E kau i ka poloka 2 ma kahi huna
4. Wehe i ka poloka 2 mai ka huna huna
5. E kau i ka poloka 3 ma kahi huna
5 mau hana i pau! Eia naʻe, ʻaʻole hiki ke kapa ʻia kēia kūlana maʻamau; ʻoiaʻiʻo, ke koi nei mākou iā HBase e hana i kahi hui o ka hana pono ʻole. Heluhelu mau ʻo ia i ka ʻikepili mai ka cache OS, waiho iā ia ma BlockCache, e hoʻolei koke iā ia no ka mea ua hiki mai kahi ʻāpana hou. Hōʻike ka animation i ka hoʻomaka ʻana o ka pou i ke ʻano o ka pilikia - Ke hele nei ʻo Garbage Collector i ka pālākiō, ua wela ka lewa, ua huhū ʻo Greta liʻiliʻi ma kahi mamao a me ka wela o Sweden. A ʻaʻole makemake mākou i ka poʻe IT i ke kaumaha o nā keiki, no laila hoʻomaka mākou e noʻonoʻo i ka mea hiki iā mākou ke hana no ia.
He aha inā ʻaʻole ʻoe e hoʻokomo i nā poloka a pau i loko o ka cache, akā he hapa hapa wale nō o lākou, i ʻole e kahe ka cache? E hoʻomaka kākou ma ka hoʻohui ʻana i kekahi mau laina code i ka hoʻomaka o ka hana no ka hoʻokomo ʻana i ka ʻikepili i BlockCache:
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
if (cacheDataBlockPercent != 100 && buf.getBlockType().isData()) {
if (cacheKey.getOffset() % 100 >= cacheDataBlockPercent) {
return;
}
}
...
ʻO ka helu ma ʻaneʻi: ʻo ka offset ke kūlana o ka poloka i loko o ka faila a ʻo kāna mau huahelu hope loa e puʻunaue like ʻole ʻia mai ka 00 a hiki i ka 99. No laila, e hoʻokuʻu wale mākou i nā mea i hāʻule i ka laulā a mākou e pono ai.
No ka laʻana, hoʻonohonoho i ka cacheDataBlockPercent = 20 a ʻike i ka mea e hana nei:
Ua maopopo ka hopena. Ma nā pakuhi ma lalo nei, ua maopopo ke kumu i hiki mai ai ka wikiwiki - mālama mākou i ka nui o nā kumuwaiwai GC me ka hana ʻole i ka hana Sisyphean o ka waiho ʻana i ka ʻikepili i loko o ka huna huna wale nō e hoʻolei koke iā ia i lalo o ke kahawai o nā ʻīlio Martian:
I ka manawa like, piʻi ka hoʻohana ʻana o ka CPU, akā ʻoi aku ka liʻiliʻi ma mua o ka huahana:
He mea kūpono hoʻi e hoʻomaopopo he ʻokoʻa nā poloka i mālama ʻia ma BlockCache. ʻO ka hapa nui, ma kahi o 95%, ʻo ka ʻikepili ponoʻī. A ʻo ke koena he metadata, e like me nā kānana Bloom a i ʻole LEAF_INDEX a
No laila, ma ke code ʻike mākou i kahi kūlana nānā buf.getBlockType().isData() a mahalo i kēia meta, e waiho mākou iā ia i loko o ka cache i kēlā me kēia hihia.
I kēia manawa e hoʻonui i ka ukana a hoʻopaʻa iki i ka hiʻohiʻona i ka hele hoʻokahi. I ka hoʻāʻo mua ua hana mākou i ka pākēneka cutoff = 20 a ua hoʻohana iki ʻia ʻo BlockCache. I kēia manawa, e hoʻonoho i ka 23% a hoʻohui i 100 mau kaula i kēlā me kēia 5 mau minuke e ʻike ai i ke ʻano o ka saturation.
Maʻaneʻi mākou eʻike ai ua kokoke koke ka mana mua i ke kaupaku ma kahi o 100 tausani mau noi i kekona. ʻOiai ke hāʻawi nei ka patch i ka wikiwiki a hiki i 300 tausani. I ka manawa like, ua maopopo ʻaʻole ʻoi aku ka wikiwiki o ka "noa"; ke hoʻonui nei ka hoʻohana ʻana o ka CPU.
Eia nō naʻe, ʻaʻole kēia he hopena nani loa, no ka mea ʻaʻole mākou i ʻike ma mua i ka pākēneka o nā poloka e pono e hūnā ʻia, pili ia i ka ʻaoʻao o ka ukana. No laila, ua hoʻokō ʻia kahi mīkini e hoʻoponopono aunoa i kēia ʻāpana ma muli o ka hana o nā hana heluhelu.
ʻEkolu mau koho i hoʻohui ʻia e hoʻomalu i kēia:
hbase.lru.cache.heavy.eviction.count.limit - hoʻonohonoho i ka nui o nā manawa e holo ai ke kaʻina hana o ka kipaku ʻana i ka ʻikepili mai ka cache ma mua o ka hoʻomaka ʻana i ka hoʻohana ʻana i ka loiloi (ʻo ia hoʻi. Ma ka maʻamau, ua like ia me MAX_INT = 2147483647 a ʻo ia hoʻi, ʻaʻole e hoʻomaka ka hana me kēia waiwai. No ka mea, hoʻomaka ke kaʻina hana kipaku i kēlā me kēia 5 - 10 kekona (e pili ana i ka ukana) a me 2147483647 * 10 / 60 / 60 / 24 / 365 = 680 mau makahiki. Eia naʻe, hiki iā mākou ke hoʻonohonoho i kēia ʻāpana i ka 0 a hana i ka hiʻohiʻona e hana koke ma hope o ka hoʻomaka ʻana.
Eia nō naʻe, aia pū kekahi uku i kēia ʻāpana. Inā ʻo kā mākou haʻawe e hoʻopili mau ʻia ka heluhelu pōkole (e ʻōlelo i ke ao) a me ka heluhelu lōʻihi (i ka pō), a laila hiki iā mākou ke hōʻoia i ka huli ʻana o ka hiʻohiʻona i ka wā e holomua ana nā hana heluhelu lōʻihi.
No ka laʻana, ʻike mākou he 1 mau minuke ka lōʻihi o nā heluhelu pōkole. ʻAʻohe pono e hoʻomaka i ka hoʻolei ʻana i nā poloka, ʻaʻole e loaʻa i ka cache ka manawa e lilo i ka wā kahiko a laila hiki iā mākou ke hoʻonohonoho i kēia ʻāpana like, no ka laʻana, 10. E alakaʻi kēia i ka ʻoiaʻiʻo e hoʻomaka ka optimization e hana wale i ka wā lōʻihi- ua hoʻomaka ʻia ka heluhelu ikaika ʻana, ʻo ia hoʻi. i 100 kekona. No laila, inā loaʻa iā mākou kahi heluhelu pōkole, a laila e hele nā poloka āpau i ka cache a loaʻa (koe wale nā mea e kipaku ʻia e ka algorithm maʻamau). A ke hana mākou i nā heluhelu lōʻihi, ua hoʻāla ʻia ka hiʻohiʻona a loaʻa iā mākou ka hana kiʻekiʻe.
hbase.lru.cache.heavy.eviction.mb.size.limit - hoʻonohonoho i ka nui o nā megabytes a mākou e makemake ai e waiho i loko o ka cache (a, ʻoiaʻiʻo, kipaku) i 10 kekona. E ho'āʻo ka hiʻona e hiki i kēia waiwai a mālama. ʻO ke kumu kēia: inā mākou e hoʻolei i nā gigabytes i loko o ka cache, a laila pono mākou e kipaku i nā gigabytes, a ʻo kēia, e like me kā mākou i ʻike ai ma luna, he kumukūʻai loa. Eia nō naʻe, ʻaʻole pono ʻoe e hoʻāʻo e hoʻonoho liʻiliʻi, no ka mea, e hoʻokuʻu koke ʻia ke ʻano skip block. No nā kikowaena ikaika (e pili ana i 20-40 cores kino), ʻoi aku ka maikaʻi o ka hoʻonohonoho ʻana ma kahi o 300-400 MB. No ka papa waena (~ 10 cores) 200-300 MB. No nā ʻōnaehana nāwaliwali (2-5 cores) 50-100 MB paha ka mea maʻamau (ʻaʻole i hoʻāʻo ʻia ma kēia mau mea).
E nānā kākou pehea e hana ai kēia: e ʻōlelo kākou ua hoʻonoho mākou i ka hbase.lru.cache.heavy.eviction.mb.size.limit = 500, aia kekahi ʻano o ka ukana (heluhelu) a laila i kēlā me kēia ~ 10 kekona mākou e helu ai i ka nui o nā bytes. kipaku ʻia me ka hoʻohana ʻana i ke ʻano:
Ma luna o ke poʻo = Hui Paʻa Kūʻokoʻa (MB) * 100 / palena (MB) - 100;
Inā ua kipaku ʻia ʻo 2000 MB, a laila ua like ka Overhead me:
2000 * 100 / 500 - 100 = 300%
Ke ho'āʻo nei nā algorithms e mālama ʻaʻole i ʻoi aku ma mua o kahi mau ʻumi o ka pākēneka, no laila e hōʻemi ka hiʻohiʻona i ka pākēneka o nā poloka cached, a laila e hoʻokō ai i kahi ʻano hana auto-tuning.
Eia naʻe, inā hāʻule ka ukana, e ʻōlelo kākou he 200 MB wale nō ke kipaku ʻia a lilo ʻo Overhead i mea ʻino (ka mea i kapa ʻia ʻo overshooting):
200 * 100 / 500 - 100 = -60%
ʻO ka mea ʻē aʻe, e hoʻonui ka hiʻohiʻona i ka pakeneka o nā poloka huna a hiki i ka lilo ʻana o Overhead i mea maikaʻi.
Aia ma lalo kahi hiʻohiʻona o ke ʻano o kēia i ka ʻikepili maoli. ʻAʻohe pono e ho'āʻo e hiki i ka 0%, hikiʻole. He mea maikaʻi loa ia ma kahi o 30 - 100%, kōkua kēia i ka pale ʻana i ka puka mua ʻana mai ke ʻano loiloi i ka wā pōkole.
hbase.lru.cache.heavy.eviction.overhead.coefficient - hoʻonohonoho i ka wikiwiki a mākou e makemake ai e loaʻa ka hopena. Inā ʻike maopopo mākou he lōʻihi loa kā mākou heluhelu ʻana a ʻaʻole makemake mākou e kali, hiki iā mākou ke hoʻonui i kēia ratio a loaʻa wikiwiki ka hana kiʻekiʻe.
No ka laʻana, hoʻonoho mākou i kēia coefficient = 0.01. 'O ia ho'i, e ho'onui 'ia 'o Overhead (e 'ike i luna) i kēia helu ma ka hopena o ka hopena a e ho'emi 'ia ka pakeneka o nā poloka huna. E noʻonoʻo kākou ʻo Overhead = 300% a me ka coefficient = 0.01, a laila e hoʻemi ʻia ka pākēneka o nā poloka huna e 3%.
Hoʻokomo pū ʻia kahi loiloi "Backpressure" no nā waiwai Overhead maikaʻi ʻole (overshooting). No ka mea hiki mau ka loli manawa pōkole i ka nui o ka heluhelu a me ka hoʻokuke ʻana, hiki i kēia ʻano hana ke pale aku i ka puka mua ʻana mai ke ʻano optimization. Loaʻa i ka backpressure kahi loiloi hoʻohuli: ʻoi aku ka ikaika o ka overshooting, ʻoi aku ka nui o nā poloka i hūnā ʻia.
Code hoʻokō
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;
}
E nānā kākou i kēia me ka hoʻohana ʻana i kahi laʻana maoli. Loaʻa iā mākou kēia hōʻike hōʻike:
- E hoʻomaka kākou e hana Scan (25 threads, batch = 100)
- Ma hope o 5 mau minuke, e hoʻohui i nā loaʻa he nui (25 mau kaula, pūʻulu = 100)
- Ma hope o 5 mau minuke, hoʻopau i nā multi-gets (koe wale ka scan)
Hana mākou i ʻelua holo, mua hbase.lru.cache.heavy.eviction.count.limit = 10000 (ʻo ia ka mea e hoʻopau maoli i ka hiʻohiʻona), a laila hoʻonoho i ka palena = 0 (hiki iā ia).
Ma nā lāʻau ma lalo nei mākou e ʻike ai i ke ʻano o ka hiʻohiʻona a hoʻihoʻi i ka Overshooting i 14-71%. I kēlā me kēia manawa ke emi nei ka ukana, e hoʻohuli i ka Backpressure a me HBase e hūnā hou i nā poloka hou.
Log RegionServer
kipaku ʻia (MB): 0, lākiō 0.0, ma luna o ke poʻo (%): -100, helu hoʻokuke kaumaha: 0, hoʻopaʻa ʻia i kēia manawa Paleka ʻikepili (%): 100
kipaku ʻia (MB): 0, lākiō 0.0, ma luna o ke poʻo (%): -100, helu hoʻokuke kaumaha: 0, hoʻopaʻa ʻia i kēia manawa Paleka ʻikepili (%): 100
kipaku ʻia (MB): 2170, lākiō 1.09, ma luna o ke poʻo (%): 985, helu hoʻokuke kaumaha: 1, ke kāʻei ʻana i kēia manawa DataBlock (%): 91 <hoʻomaka
kipaku ʻia (MB): 3763, lākiō 1.08, ma luna o ke poʻo (%): 1781, helu hoʻokuke kaumaha: 2, ke kāʻei ʻana i kēia manawa DataBlock (%): 76
kipaku ʻia (MB): 3306, lākiō 1.07, ma luna o ke poʻo (%): 1553, helu hoʻokuke kaumaha: 3, ke kāʻei ʻana i kēia manawa DataBlock (%): 61
kipaku ʻia (MB): 2508, lākiō 1.06, ma luna o ke poʻo (%): 1154, helu hoʻokuke kaumaha: 4, ke kāʻei ʻana i kēia manawa DataBlock (%): 50
kipaku ʻia (MB): 1824, lākiō 1.04, ma luna o ke poʻo (%): 812, helu hoʻokuke kaumaha: 5, ke kāʻei ʻana i kēia manawa DataBlock (%): 42
kipaku ʻia (MB): 1482, lākiō 1.03, ma luna o ke poʻo (%): 641, helu hoʻokuke kaumaha: 6, ke kāʻei ʻana i kēia manawa DataBlock (%): 36
kipaku ʻia (MB): 1140, lākiō 1.01, ma luna o ke poʻo (%): 470, helu hoʻokuke kaumaha: 7, ke kāʻei ʻana i kēia manawa DataBlock (%): 32
kipaku ʻia (MB): 913, lākiō 1.0, ma luna o ke poʻo (%): 356, helu hoʻokuke kaumaha: 8, ke kāʻei ʻana i kēia manawa DataBlock (%): 29
kipaku ʻia (MB): 912, lākiō 0.89, ma luna o ke poʻo (%): 356, helu hoʻokuke kaumaha: 9, ke kāʻei ʻana i kēia manawa DataBlock (%): 26
kipaku ʻia (MB): 684, lākiō 0.76, ma luna o ke poʻo (%): 242, helu hoʻokuke kaumaha: 10, ke kāʻei ʻana i kēia manawa DataBlock (%): 24
kipaku ʻia (MB): 684, lākiō 0.61, ma luna o ke poʻo (%): 242, helu hoʻokuke kaumaha: 11, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 456, lākiō 0.51, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 12, ke kāʻei ʻana i kēia manawa DataBlock (%): 21
kipaku ʻia (MB): 456, lākiō 0.42, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 13, ke kāʻei ʻana i kēia manawa DataBlock (%): 20
kipaku ʻia (MB): 456, lākiō 0.33, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 14, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 15, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 342, lākiō 0.32, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 16, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 342, lākiō 0.31, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 17, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.3, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 18, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.29, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 19, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.27, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 20, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.25, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 21, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.24, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 22, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.22, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 23, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.21, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 24, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.2, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 25, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 228, lākiō 0.17, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 26, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 456, lākiō 0.17, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 27, hoʻopaʻa ʻia i kēia manawa DataBlock (%): 18 < i hoʻohui ʻia (akā ʻo ka papa ʻaina like)
kipaku ʻia (MB): 456, lākiō 0.15, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 28, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 342, lākiō 0.13, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 29, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 342, lākiō 0.11, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 30, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 342, lākiō 0.09, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 31, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.08, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 32, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.07, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 33, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.06, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 34, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.05, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 35, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.05, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 36, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 228, lākiō 0.04, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 37, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 109, lākiō 0.04, ma luna o ke poʻo (%): -46, helu hoʻokuke kaumaha: 37, hoʻopaʻa i kēia manawa DataBlock (%): 22 < puʻe hope.
kipaku ʻia (MB): 798, lākiō 0.24, ma luna o ke poʻo (%): 299, helu hoʻokuke kaumaha: 38, ke kāʻei ʻana i kēia manawa DataBlock (%): 20
kipaku ʻia (MB): 798, lākiō 0.29, ma luna o ke poʻo (%): 299, helu hoʻokuke kaumaha: 39, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 570, lākiō 0.27, ma luna o ke poʻo (%): 185, helu hoʻokuke kaumaha: 40, ke kāʻei ʻana i kēia manawa DataBlock (%): 17
kipaku ʻia (MB): 456, lākiō 0.22, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 41, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 342, lākiō 0.16, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 42, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 342, lākiō 0.11, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 43, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 228, lākiō 0.09, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 44, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 228, lākiō 0.07, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 45, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 228, lākiō 0.05, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 46, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 222, lākiō 0.04, ma luna o ke poʻo (%): 11, helu hoʻokuke kaumaha: 47, ke kāʻei ʻana i kēia manawa DataBlock (%): 16
kipaku ʻia (MB): 104, lākiō 0.03, ma luna o ke poʻo (%): -48, helu hoʻokuke kaumaha: 47, hoʻopaʻa ʻia i kēia manawa DataBlock (%): 21 < loaʻa ka interrupt
kipaku ʻia (MB): 684, lākiō 0.2, ma luna o ke poʻo (%): 242, helu hoʻokuke kaumaha: 48, ke kāʻei ʻana i kēia manawa DataBlock (%): 19
kipaku ʻia (MB): 570, lākiō 0.23, ma luna o ke poʻo (%): 185, helu hoʻokuke kaumaha: 49, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 342, lākiō 0.22, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 50, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 228, lākiō 0.21, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 51, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 228, lākiō 0.2, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 52, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 228, lākiō 0.18, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 53, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 228, lākiō 0.16, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 54, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 228, lākiō 0.14, ma luna o ke poʻo (%): 14, helu hoʻokuke kaumaha: 55, ke kāʻei ʻana i kēia manawa DataBlock (%): 18
kipaku ʻia (MB): 112, lākiō 0.14, ma luna o ke poʻo (%): -44, helu hoʻokuke kaumaha: 55, hoʻopaʻa i kēia manawa DataBlock (%): 23 < puʻe hope.
kipaku ʻia (MB): 456, lākiō 0.26, ma luna o ke poʻo (%): 128, helu hoʻokuke kaumaha: 56, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.31, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 57, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 58, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 59, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 60, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 61, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 62, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 63, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.32, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 64, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 65, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 66, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.32, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 67, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 68, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.32, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 69, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.32, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 70, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 71, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 72, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 73, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 74, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 75, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 342, lākiō 0.33, ma luna o ke poʻo (%): 71, helu hoʻokuke kaumaha: 76, ke kāʻei ʻana i kēia manawa DataBlock (%): 22
kipaku ʻia (MB): 21, lākiō 0.33, ma luna o ke poʻo (%): -90, helu hoʻokuke kaumaha: 76, hoʻopaʻa ʻia i kēia manawa Paleka ʻikepili (%): 32
kipaku ʻia (MB): 0, lākiō 0.0, ma luna o ke poʻo (%): -100, helu hoʻokuke kaumaha: 0, hoʻopaʻa ʻia i kēia manawa Paleka ʻikepili (%): 100
kipaku ʻia (MB): 0, lākiō 0.0, ma luna o ke poʻo (%): -100, helu hoʻokuke kaumaha: 0, hoʻopaʻa ʻia i kēia manawa Paleka ʻikepili (%): 100
Pono nā scans e hōʻike i ke kaʻina hana like ma ke ʻano o ka pakuhi o ka pilina ma waena o ʻelua ʻāpana cache - hoʻokahi (kahi i noi ʻole ʻia ai nā poloka i noi ʻole ʻia ma mua) a me ka lehulehu (ʻo ka ʻikepili "noi" i hoʻokahi manawa i mālama ʻia ma ʻaneʻi):
A ʻo ka hope, he aha ke ʻano o ka hana ʻana o nā palena i ke ʻano o ka pakuhi. No ka hoʻohālikelike, ua hoʻopau loa ʻia ka cache i ka hoʻomaka ʻana, a laila ua hoʻokuʻu ʻia ʻo HBase me ka caching a me ka hoʻopaneʻe ʻana i ka hoʻomaka ʻana o ka hana optimization e 5 mau minuke (30 eviction cycles).
Hiki ke loaʻa ke code piha ma ka Pull Request
Eia naʻe, ʻaʻole hiki i ka 300 tausani heluhelu i kēlā me kēia kekona ke loaʻa i kēia hāmeʻa ma lalo o kēia mau kūlana. ʻO ka mea ʻoiaʻiʻo inā pono ʻoe e komo i ka ʻikepili ma o HDFS, ua hoʻohana ʻia ke ʻano ShortCircuitCache (ma hope aʻe i kapa ʻia ʻo SSC), e hiki ai iā ʻoe ke komo pololei i ka ʻikepili, e pale aku i nā pilina pūnaewele.
Ua hōʻike ʻia ʻo Profiling ʻoiai ʻoiai e hāʻawi ana kēia mīkini i ka waiwai nui, i kekahi manawa e lilo ia i bottleneck, no ka mea, ʻaneʻane nā hana koʻikoʻi a pau i loko o kahi laka, e alakaʻi ana i ka pale ʻana i ka hapa nui o ka manawa.
I ka ʻike ʻana i kēia, ua ʻike mākou hiki ke hoʻopau ʻia ka pilikia ma ka hana ʻana i kahi ʻano o nā SSC kūʻokoʻa:
private final ShortCircuitCache[] shortCircuitCache;
...
shortCircuitCache = new ShortCircuitCache[this.clientShortCircuitNum];
for (int i = 0; i < this.clientShortCircuitNum; i++)
this.shortCircuitCache[i] = new ShortCircuitCache(…);
A laila e hana pū me lākou, me ka wehe ʻole ʻana i nā intersection ma ka helu offset hope loa:
public ShortCircuitCache getShortCircuitCache(long idx) {
return shortCircuitCache[(int) (idx % clientShortCircuitNum)];
}
I kēia manawa hiki iā ʻoe ke hoʻomaka i ka hoʻāʻo. No ka hana ʻana i kēia, e heluhelu mākou i nā faila mai HDFS me kahi noi multi-threaded maʻalahi. E hoʻonoho i nā ʻāpana:
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
A heluhelu wale i nā faila:
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);
}
Hoʻokō ʻia kēia code ma nā ʻāpana ʻokoʻa a hoʻonui mākou i ka helu o nā faila heluhelu i ka manawa like (mai 10 a 200 - axis horizontal) a me ka helu o nā cache (mai 1 a 10 - kiʻi). Hōʻike ka axis vertical i ka wikiwiki i loaʻa mai ka hoʻonui ʻana i ka SSC pili i ka hihia inā hoʻokahi wale nō huna huna.
Pehea e heluhelu ai i ka pakuhi: ʻO ka manawa hoʻokō no 100 tausani heluhelu ma nā poloka 64 KB me hoʻokahi cache e pono ai 78 kekona. ʻOiai me 5 mau huna e lawe i 16 kekona. ʻO kēlā mau mea. aia ka wikiwiki o ~5 manawa. E like me ka mea i ʻike ʻia ma ka pakuhi, ʻaʻole i ʻike nui ʻia ka hopena no kahi helu liʻiliʻi o nā heluhelu like ʻole, hoʻomaka ia e pāʻani i kahi kuleana i ʻike ʻia ke ʻoi aku ma mua o 50 mau helu heluhelu. a ma luna aʻe e hāʻawi i ka hoʻonui nui o ka hana.
'Ōlelo Aʻo 1: no ka mea he ʻano liʻiliʻi nā hopena hōʻike (e ʻike i lalo), ua hoʻokō ʻia nā holo 3 a ua hoʻohālikelike ʻia nā kumu hopena.
Nānā 2: Ua like ka loaʻa ʻana o ka hana ma ka hoʻonohonoho ʻana i ke komo ʻole, ʻoiai ʻoi aku ka lohi o ke komo ʻana iho.
Eia naʻe, pono e wehewehe, ʻaʻole like me ka HBase, ʻaʻole manuahi kēia wikiwiki. Maanei mākou e "wehe" i ka mana o ka CPU e hana hou aku, ma kahi o ke kau ʻana i nā laka.
Maanei hiki iā ʻoe ke ʻike, ma ka laulā, ʻo ka hoʻonui ʻana i ka helu o nā cache e hāʻawi i kahi hoʻonui like o ka hoʻohana ʻana i ka CPU. Eia nō naʻe, ʻoi aku ka nui o nā hui lanakila.
Eia kekahi laʻana, e nānā pono kākou i ka hoʻonohonoho SSC = 3. ʻO ka piʻiʻana o ka hana ma ka laulā ma kahi o 3.3 manawa. Ma lalo iho nā hopena mai nā holo kaʻawale ʻekolu.
ʻOiai e piʻi ana ka hoʻohana CPU ma kahi o 2.8 mau manawa. ʻAʻole nui ka ʻokoʻa, akā ua hauʻoli ʻo Greta liʻiliʻi a loaʻa paha ka manawa e hele ai i ke kula a lawe i nā haʻawina.
No laila, he hopena maikaʻi kēia no kēlā me kēia hāmeʻa e hoʻohana ana i ke komo nui i ka HDFS (e like me Spark, a me nā mea ʻē aʻe), inā he māmā ke code noi (ʻo ia hoʻi, aia ka plug ma ka ʻaoʻao o ka mea kūʻai aku HDFS) a aia ka mana CPU manuahi. . No ka nānā ʻana, e hoʻāʻo kākou i ka hopena o ka hoʻohana ʻana o BlockCache optimization a me SSC tuning no ka heluhelu ʻana mai HBase.
Hiki ke ʻike ʻia ma lalo o ia mau kūlana ʻaʻole nui ka hopena e like me nā hoʻāʻo hoʻomaʻemaʻe (heluhelu me ka ʻole o ka hana ʻana), akā hiki ke ʻoki i kahi 80K hou ma aneʻi. ʻO ka hui pū ʻana, hāʻawi nā optimization ʻelua a hiki i ka 4x wikiwiki.
Ua hana pū ʻia kahi PR no kēia hoʻonui
A ʻo ka mea hope loa, he mea hoihoi ia e hoʻohālikelike i ka hana heluhelu ʻana o kahi waihona kolamu ākea like, Cassandra a me HBase.
No ka hana ʻana i kēia, ua hoʻomaka mākou i nā mea hoʻohana maʻamau YCSB hoʻāʻo hoʻāʻo ʻana mai ʻelua mau pūʻali (800 mau kaula i ka huina). Ma ka ʻaoʻao kikowaena - 4 mau manawa o RegionServer a me Cassandra ma 4 mau pūʻali (ʻaʻole nā mea e holo ai nā mea kūʻai aku, e pale i kā lākou mana). Loaʻa nā heluhelu mai nā papa o ka nui:
HBase - 300 GB ma HDFS (100 GB ʻikepili maʻemaʻe)
Cassandra - 250 GB (helu hoʻopiʻi = 3)
ʻO kēlā mau. ua like ka nui o ka leo (ma HBase a ʻoi aku ka liʻiliʻi).
Nā ʻāpana HBase:
dfs.client.short.circuit.num = 5 (Ka hoʻonui ʻana i ka mea kūʻai aku HDFS)
hbase.lru.cache.heavy.eviction.count.limit = 30 - ʻo ia hoʻi, e hoʻomaka ka hana ʻana ma hope o 30 mau kipaku (~ 5 mau minuke)
hbase.lru.cache.heavy.eviction.mb.size.limit = 300 - ka nui o ka hoʻopaʻa ʻana a me ka hoʻokuke ʻana
Hoʻopili ʻia nā log YCSB a hōʻuluʻulu ʻia i nā kiʻi Excel:
E like me kāu e ʻike ai, hiki i kēia mau optimizations ke hoʻohālikelike i ka hana o kēia mau ʻikepili ma lalo o kēia mau kūlana a loaʻa iā 450 tausani heluhelu i kēlā me kēia kekona.
Lana ko mākou manaʻo e hiki ke hoʻohana i kēia ʻike i kekahi i ka wā o ka hakakā hoihoi no ka huahana.
Source: www.habr.com