ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ኚትልቅ ዳታ ጋር ሲሰሩ ኹፍተኛ አፈፃፀም ኚሚያስፈልጉት ቁልፍ መስፈርቶቜ አንዱ ነው. እኛ፣ በ Sberbank ዚውሂብ ጭነት አስተዳደር ውስጥ፣ ሁሉንም ማለት ይቻላል ግብይቶቜን ወደ ሃዱፕ-ተኮር ዳታ ክላውድ እያስገባን ነው፣ እና ስለዚህ ትልቅ ዹመሹጃ ፍሰቶቜን እያስተናገድን ነው። በተፈጥሮ እኛ ሁል ጊዜ አፈፃፀሙን ለማሻሻል መንገዶቜን እንፈልጋለን ፣ እና አሁን ዹRegionalServer HBase እና HDFS ደንበኛን እንዎት ማስተካኚል እንደቻልን ልንነግርዎ እንፈልጋለን ፣ ይህም ዚንባብ ኊፕሬሜኑን ፍጥነት በኹፍተኛ ሁኔታ ለማሳደግ አስቜሎታል።
ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ሆኖም ወደ ማሻሻያዎቹ ይዘት ኹመቀጠልዎ በፊት በመርህ ደሹጃ በኀቜዲዲ ላይ ኚተቀመጡ ሊታለፉ ዚማይቜሉትን ገደቊቜ ማውራት ጠቃሚ ነው ።

ለምን HDD እና ፈጣን ዹዘፈቀደ መዳሚሻ ንባብ ዚማይጣጣሙ ና቞ው።
እንደሚታወቀው HBase እና ሌሎቜ ብዙ ዚውሂብ ጎታዎቜ መሹጃን በበርካታ አስር ኪሎባይት መጠናቾው ያኚማቻሉ። በነባሪ ይህ ወደ 64 ኪ.ባ. አሁን 100 ባይት ብቻ ማግኘት እንዳለብን አስቡት እና HBase ይህን መሹጃ ዹተወሰነ ቁልፍ በመጠቀም እንዲሰጠን እንጠይቃለን። በHFiles ውስጥ ያለው ዹማገጃ መጠን 64 ኪባ ስለሆነ፣ ጥያቄው ኚሚያስፈልገው 640 እጥፍ ይበልጣል (አንድ ደቂቃ ብቻ!)።

በተጚማሪም፣ ጥያቄው በኀቜዲኀፍኀስ እና በሜታዳታ መሞጎጫ ዘዮው በኩል ስለሚያልፍ ShortCircuitCache (ይህም በቀጥታ ወደ ፋይሎቜ መድሚስን ይፈቅዳል), ኚዚያ ይህ ቀድሞውኑ 1 ሜባ ኚዲስክ ማንበብን ያመጣል. ሆኖም, ይህ በመለኪያው ሊስተካኚል ይቜላል dfs.client.read.shortcircuit.buffer.መጠን እና በብዙ አጋጣሚዎቜ ይህንን ዋጋ መቀነስ ምክንያታዊ ነው, ለምሳሌ ወደ 126 ኪ.ባ.

ይህን እናደርጋለን እንበል ነገር ግን በተጚማሪ መሹጃን በጃቫ api ማንበብ ስንጀምር እንደ FileChannel.read ባሉ ተግባራት እና ኊፕሬቲንግ ሲስተሙን ዹተወሰነውን ዚውሂብ መጠን እንዲያነብ በመጠዹቅ "ልክ እንደ ሆነ" 2 እጥፍ ይቀንሳል. ፣ ማለትም እ.ኀ.አ. በእኛ ሁኔታ በ 256 ኪ.ቢ. ምክንያቱም ይህን ባህሪ ለመኹላኹል በጃቫ ውስጥ FADV_RANDOM ባንዲራ ለማዘጋጀት ቀላል መንገድ ስለሌለ ነው።

በውጀቱም, ዚእኛን 100 ባይት ለማግኘት, 2600 እጥፍ ተጚማሪ በኮድ ውስጥ ይቀንሳል. መፍትሄው ግልፅ ዹሆነ ይመስላል ፣ዚብሎክ መጠኑን ወደ ኪሎባይት እንቀንሰው ፣ዚተጠቀሰውን ባንዲራ እናስቀምጠው እና ታላቅ ዚእውቀት መፋጠን እናገኝ። ቜግሩ ግን ዹማገጃውን መጠን በ 2 ጊዜ በመቀነስ በአንድ ክፍለ ጊዜ ዹተቀነሰ ባይት ቁጥርን በ 2 እጥፍ እንቀንሳለን.

ዹFADV_RANDOM ባንዲራ በማዘጋጀት ዹተወሰነ ትርፍ ማግኘት ይቻላል ነገር ግን በኹፍተኛ ባለብዙ-ክር እና 128 ኪባ ዹማገጃ መጠን ብቻ ነው፣ ነገር ግን ይህ ቢበዛ አስር በመቶዎቜ ዚሚቆጠሩ በመቶዎቜ ዚሚቆጠሩ ና቞ው።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ፈተናዎቹ ዚተካሄዱት በ100 ፋይሎቜ ላይ ሲሆን እያንዳንዳ቞ው 1 ጂቢ መጠን ያላ቞ው እና በ10 HDDs ላይ ይገኛሉ።

በእንደዚህ ዓይነት ፍጥነት በመሠሚቱ ዚምንቆጥሚውን እናሰላለን-
ኹ 10 ዲስኮቜ በ 280 ሜባ / ሰ ፍጥነት እናነባለን እንበል, ማለትም. 3 ሚሊዮን ጊዜ 100 ባይት። ግን እንደምናስታውሰው, ኹተነበበው 2600 እጥፍ ያነሰ ውሂብ እንፈልጋለን. ስለዚህ, 3 ሚሊዮን ለ 2600 እናካፍላለን እና እናገኛለን በሰኚንድ 1100 መዝገቊቜ.

ተስፋ አስቆራጭ፣ አይደል? ተፈጥሮ እንዲህ ነው። ዹዘፈቀደ መዳሚሻ በኀቜዲዲ ላይ ዚውሂብ መዳሚሻ - ምንም እንኳን ዹማገጃው መጠን ምንም ይሁን ምን. ይህ ዚነሲብ ተደራሜነት አካላዊ ገደብ ነው፣ እና ምንም አይነት ዳታቀዝ በእንደዚህ አይነት ሁኔታዎቜ ተጚማሪ መጭመቅ አይቜልም።

ታዲያ መሠሚቶቜ በጣም ኹፍተኛ ፍጥነትን እንዎት ማግኘት ይቜላሉ? ለዚህ ጥያቄ መልስ ለማግኘት በሚኹተለው ሥዕል ላይ ምን እንደ ሆነ እንመልኚት።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እዚህ ዚመጀመሪያዎቹ ደቂቃዎቜ ፍጥነቱ በሎኮንድ አንድ ሺህ ያህል ሪኚርዶቜ መሆኑን እናያለን. ሆኖም ፣ ኹተጠዹቀው በላይ ብዙ በመቀነሱ ምክንያት መሹጃው በስርዓተ ክወናው (ሊኑክስ) ቡፍ / መሞጎጫ ውስጥ ተቀምጧል እና ፍጥነቱ በሰኚንድ ወደ 60 ሺህ ጚዋነት ያድጋል።

ስለዚህ፣ በስርዓተ ክወናው መሞጎጫ ውስጥ ያሉትን ወይም በኀስኀስዲ/ኀንቪኀምኀ ማኚማቻዎቜ ውስጥ በተነፃፃሪ ዚመዳሚሻ ፍጥነት ውስጥ ዚሚገኙትን ዚእነዚያን መሚጃዎቜ ብቻ ተደራሜነትን ማፋጠን እንሰራለን።

በእኛ ሁኔታ ፣ በ 4 አገልጋዮቜ ላይ ሙኚራዎቜን እናደርጋለን ፣ እያንዳንዳ቞ው እንደሚኚተለው ይኹፈላሉ ።

ሲፒዩ፡ Xeon E5-2680 v4 @ 2.40GHz 64 ክሮቜ።
ማህደሹ ትውስታ: 730 ጊባ.
ጃቫ ስሪት: 1.8.0_111

እና እዚህ ዋናው ነጥብ ማንበብ ዚሚያስፈልገው በሰንጠሚዊቜ ውስጥ ያለው ዚውሂብ መጠን ነው. እውነታው ግን ሙሉ በሙሉ ወደ HBase መሞጎጫ ውስጥ ኚሚገባው ሠንጠሚዥ ላይ መሹጃን ካነበቡ ኚኊፕሬቲንግ ሲስተሙ ቡፍ/መሞጎጫ ለማንበብ እንኳን አይመጣም። ምክንያቱም HBase በነባሪነት 40% ማህደሹ ትውስታን BlockCache ለተባለ መዋቅር ይመድባል። በእውነቱ፣ ይህ ConcurrentHashMap ነው፣ ቁልፉ ዹፋይል ስም + ዹማገጃው ማካካሻ ሲሆን እሎቱ በዚህ ማካካሻ ላይ ያለው ትክክለኛው ዳታ ነው።

ስለዚህ, ኹዚህ መዋቅር ብቻ ስናነብ, እኛ ታላቅ ፍጥነት ይመልኚቱእንደ አንድ ሚሊዮን ጥያቄዎቜ በሰኚንድ። ግን በመቶዎቜ ዚሚቆጠሩ ጊጋባይት ማህደሹ ትውስታን ለዳታቀዝ ፍላጎቶቜ ብቻ መስጠት እንደማንቜል እናስብ ፣ ምክንያቱም ብዙ ሌሎቜ ጠቃሚ ነገሮቜ በእነዚህ አገልጋዮቜ ላይ እዚተሜኚሚኚሩ ነው።

ለምሳሌ, በእኛ ሁኔታ, በአንድ RS ላይ ያለው ዹ BlockCache መጠን 12 ጂቢ ገደማ ነው. በአንድ መስቀለኛ መንገድ ላይ ሁለት RS አሹፍን, ማለትም. 96 ጂቢ በሁሉም አንጓዎቜ ላይ ለ BlockCache ተመድቧል። እና በተመሳሳይ ጊዜ, ብዙ ተጚማሪ መሚጃዎቜ አሉ, ለምሳሌ, እያንዳንዳ቞ው 4 ሰንጠሚዊቜ, 130 ክልሎቜ, በ 800 ሜባ መጠን ያላ቞ው ፋይሎቜ, በ FAST_DIFF ዹተጹመቁ, ማለትም. በአጠቃላይ 410 ጂቢ (ይህ ንጹህ መሹጃ ነው, ማለትም ዚማባዛትን ሁኔታ ግምት ውስጥ ሳያስገባ).

ስለዚህ, BlockCache ኹጠቅላላው መሹጃ 23% ብቻ ነው እና ይህ BigData ተብሎ ኚሚጠራው ትክክለኛ ሁኔታ ጋር በጣም ዹቀሹበ ነው. እና እዚህ በጣም ሳቢው ይጀምራል - ኹሁሉም በኋላ ፣ ትንሜ መሞጎጫ ሲመታ ፣ አፈፃፀሙ እዚባሰ መምጣቱ ግልፅ ነው። ደግሞም ፣ ሚስጥራዊነት በሚፈጠርበት ጊዜ ብዙ ስራዎቜን መሥራት አለብዎት - ማለትም ዚስርዓት ተግባራትን ኚመጥራት በፊት ውሚድ. ነገር ግን, ይህ ማስቀሚት አይቻልም, እና ስለዚህ ሙሉ ለሙሉ ዹተለዹ ገፅታን እናስብ - በመሞጎጫው ውስጥ ያለው መሹጃ ምን ይሆናል?

ሁኔታውን እናቅልለው እና 1 ነገር ብቻ ዚተቀመጠበት መሞጎጫ እንዳለን እናስብ። ኚካሌው 3 እጥፍ በሚበልጥ ዚውሂብ መጠን ለመስራት ስንሞክር ምን እንደሚፈጠር ዚሚያሳይ ምሳሌ እዚህ አለ፡-

1. እገዳ 1 በመሞጎጫ ውስጥ ያስቀምጡ
2. እገዳ 1 ኚመሞጎጫ ውስጥ ያስወግዱ
3. እገዳ 2 በመሞጎጫ ውስጥ ያስቀምጡ
4. እገዳ 2 ኚመሞጎጫ ውስጥ ያስወግዱ
5. እገዳ 3 በመሞጎጫ ውስጥ ያስቀምጡ

5 ድርጊቶቜ ተኹናውነዋል! ነገር ግን፣ ይህ ሁኔታ መደበኛ ተብሎ ሊጠራ አይቜልም፣ በእርግጥ፣ HBase ሙሉ ለሙሉ ዹማይጠቅም ስራ እንዲሰራ እያስገደድነው ነው። አዲስ ዹመሹጃ ክፍል ስለመጣ ወዲያውኑ ለመጣል ኚስርዓተ ክወናው መሞጎጫ ላይ ያለማቋሚጥ ውሂብ ያነባል፣ በብሎክካሌው ውስጥ ያስቀምጠዋል። በጜሁፉ መጀመሪያ ላይ ያለው አኒሜሜን ዚቜግሩን ምንነት ያሳያል - ቆሻሻ ሰብሳቢው ኚገበታዎቹ ውጪ ነው፣ ኚባቢ አዹር እዚሞቀ ነው፣ ትንሿ ግሬታ በሩቅ እና በሞቃታማ ስዊድን ውስጥ እዚተበሳጚቜ ነው። እና እኛ ዚአይቲ ሰዎቜ ህጻናት በሚያዝኑበት ጊዜ አንወደውም, ስለዚህ በዚህ ጉዳይ ላይ ምን ሊደሹግ እንደሚቜል ማሰብ እንጀምራለን.

ግን ሁሉም ብሎኮቜ በመሞጎጫው ውስጥ ካልተቀመጡ ፣ ግን ዹተወሰነ መቶኛ ብቻ ፣ መሞጎጫው ኹመጠን በላይ እንዳይፈስስ? በ BlockCache ዹግፋ ተግባር ላይ ጥቂት ዚኮድ መስመሮቜን በማኹል እንጀምር፡-

  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
    if (cacheDataBlockPercent != 100 && buf.getBlockType().isData()) {
      if (cacheKey.getOffset() % 100 >= cacheDataBlockPercent) {
        return;
      }
    }
...

እዚህ ያለው ትርጉሙ ዹሚኹተለው ነው፣ ማካካሻ በፋይሉ ውስጥ ያለው ዹማገጃ ቊታ እና ዚመጚሚሻዎቹ አሃዞቜ በዘፈቀደ እና በእኩል መጠን ኹ 00 እስኚ 99 ይሰራጫሉ ። ስለዚህ እኛ ወደምንፈልገው ክልል ውስጥ ዚሚወድቁትን ብቻ እንዘለላለን።

ለምሳሌ፡cacheDataBlockPercent = 20 አዘጋጅ እና ምን እንደተፈጠሚ ተመልኚት፡

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ውጀቱ ግልጜ ነው. ኹዚህ በታቜ ባሉት ግራፎቜ ውስጥ ይህ ማፋጠን ለምን እንደተኚሰተ ግልፅ ይሆናል - ወዲያውኑ በማርስ ውሟቜ ላይ ወደ ፍሳሜ ማስወገጃው ለመጣል ዚሲሲፊን ጉልበት ሳናደርግ ብዙ ዚጂሲ ሀብቶቜን እንቆጥባለን ።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

በተመሳሳይ ጊዜ ዚሲፒዩ አጠቃቀም ያድጋል ነገር ግን ኚአፈጻጞም በጣም ያነሰ ነው፡

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እዚህ ላይ በብሎክካሌ ውስጥ ዚተኚማቹ ብሎኮቜ ዚተለያዩ መሆናቾውን ልብ ሊባል ዚሚገባው ጉዳይ ነው። አብዛኛው፣ 95% ገደማ፣ ራሱ መሹጃ ነው። እና ቀሪው እንደ Bloom filters ወይም LEAF_INDEX እና ያሉ ሜታዳታ ነው። ወዘተ.. ይህ ውሂብ በቂ አይደለም, ነገር ግን በጣም ጠቃሚ ነው, ምክንያቱም በቀጥታ ወደ ውሂቡ ኹመዞርዎ በፊት, HBase ሜታውን በመመልኚት እዚህ ዹበለጠ መፈለግ አስፈላጊ መሆኑን እና እንደዚያ ኹሆነ, ለእሱ ፍላጎት ያለው እገዳ ዚት እንዳለ ለመሚዳት.

ስለዚህ, በኮዱ ውስጥ ዚሁኔታ ማሚጋገጫን እናያለን buf.getBlockType().isData() እና ለዚህ ሜታ ምስጋና ይግባውና በማንኛውም ሁኔታ መሞጎጫ ውስጥ እናስቀምጣለን።

አሁን ጭነቱን እንጚምር እና በተመሳሳይ ጊዜ ባህሪውን በትንሹ አስተካክል. በመጀመሪያው ፈተና ዚመቁሚጫውን መቶኛ = 20 አድርገናል እና BlockCache ትንሜ ተጭኖ ነበር። አሁን ወደ 23% እናስቀምጠው እና ሙሌት ሲኚሰት ለማዚት በዹ 100 ደቂቃው 5 ክሮቜ እንጚምር።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እዚህ ላይ ዚመጀመሪያው ስሪት በሰኚንድ 100 ሺህ በሚጠጉ ጥያቄዎቜ ላይ ወዲያውኑ ጣሪያውን እንደሚመታ እናያለን። ፕላስተር እስኚ 300 ሺህ ፍጥነትን ይሰጣል። በተመሳሳይ ጊዜ, ተጚማሪ ማፋጠን ኹአሁን በኋላ "ነጻ" እንዳልሆነ ግልጜ ነው, ዚሲፒዩ አጠቃቀምም እያደገ ነው.

ሆኖም ፣ ይህ በጣም ዚሚያምር መፍትሄ አይደለም ፣ ምክንያቱም ምን ያህል ዚብሎኮቜ መቶኛ ወደ መሞጎጫ አስቀድመን አናውቅም ፣ በጭነት መገለጫው ላይ ዹተመሠሹተ ነው። ስለዚህ በንባብ ስራዎቜ እንቅስቃሎ ላይ በመመስሚት ይህንን ግቀት በራስ-ሰር ለማስተካኚል ዘዮ ተተግብሯል።

ይህንን ለመቆጣጠር ሶስት አማራጮቜ ተጚምሚዋል፡-

hbase.lru.cache.ኚባድ.ማስወጣት.መቁጠር.ገደብ - ማመቻ቞ትን መጠቀም ኚመጀመራቜን በፊት መሹጃን ኚመሞጎጫው ዚማስወጣት ሂደት ምን ያህል ጊዜ መጀመር እንዳለበት ያዘጋጃል (ማለትም ብሎኮቜን መዝለል)። በነባሪ፣ ኹMAX_INT = 2147483647 ጋር እኩል ነው እና በእውነቱ ባህሪው ኹዚህ እሎት ጋር መስራት አይጀምርም ማለት ነው። ምክንያቱም ዹማፈናቀሉ ሂደት በዹ 5 - 10 ሎኮንድ (በጭነቱ ላይ ዹተመሰሹተ ነው) እና 2147483647 * 10/60/60/24/365 = 680 ዓመታት። ነገር ግን፣ ይህንን ግቀት ወደ 0 እናዘጋጃለን እና ባህሪው ኚጅምሩ በኋላ ወዲያውኑ እንዲሰራ ማድሚግ እንቜላለን።

ሆኖም፣ በዚህ ግቀት ውስጥ ዚመክፈያ ጭነትም አለ። ዹአጭር ጊዜ ንባብ (ቀን እንበል) እና ዚሚዥም ጊዜ ንባብ (በሌሊት) ያለማቋሚጥ ዹተጠላለፉ ዚጭነቱ ተፈጥሮ ካለን ዹሹጅም ጊዜ ዚማንበብ ስራዎቜ ሲኚናወኑ ብቻ ባህሪው እንዲበራ ማድሚግ እንቜላለን። በሂደት ላይ.

ለምሳሌ፣ ዹአጭር ጊዜ ንባብ አብዛኛውን ጊዜ 1 ደቂቃ ያህል እንደሚቆይ እናውቃለን። ብሎኮቜን መወርወር መጀመር አያስፈልግም ፣ መሞጎጫው ጊዜው ያለፈበት ለመሆን ጊዜ አይኖሹውም ፣ እና ኚዚያ ይህንን ግቀት ለምሳሌ 10 ን ማዋቀር እንቜላለን ፣ ይህ ማመቻ቞ት ሹጅም ንቁ ንባብ ሲኖር ብቻ ወደመሆኑ እውነታ ይመራል ። ተጀምሯል፣ i. ኹ 100 ሰኚንድ በኋላ. ስለዚህ ዹአጭር ጊዜ ንባብ ካለን ሁሉም ብሎኮቜ ወደ መሞጎጫው ውስጥ ይገባሉ እና ይገኛሉ (በመደበኛ ስልተ ቀመር ኚሚወጡት በስተቀር)። እና ዹሹጅም ጊዜ ንባቊቜን ስናደርግ ባህሪው ይበራል እና በጣም ዚተሻለ አፈጻጞም ይኖሚናል።

hbase.lru.cache.ኚባድ.ማስወጣት.mb.መጠን.ገደብ - በ10 ሰኚንድ ውስጥ ምን ያህል ሜጋባይት መሞጎጫ ውስጥ ማስቀመጥ እንደምንፈልግ ያዘጋጃል። ባህሪው ይህንን እሎት ለመድሚስ እና ለማቆዚት ይሞክራል። ዋናው ነገር ጊጋባይት ወደ መሞጎጫው ውስጥ ካስገባን ጊጋባይት መባሚር አለበት ይህ ደግሞ ኹላይ እንዳዚነው በጣም ውድ ነው። ነገር ግን, በጣም ትንሜ ለማዘጋጀት መሞኹር ዚለብዎትም, ምክንያቱም ይህ ኚብሎክ መዝለል ሁነታ ያለጊዜው መውጣትን ያመጣል. ለኃይለኛ አገልጋዮቜ (ኹ20-40 አካላዊ ኮሮቜ) ኹ300-400 ሜባ አካባቢ ማዘጋጀት ጥሩ ነው። ለመካኚለኛው ክፍል (~ 10 ኮር) 200-300 ሜባ. ለደካማ ስርዓቶቜ (2-5 ኮር) 50-100 ሜባ መደበኛ ሊሆን ይቜላል (በእንደዚህ አይነት ስርዓቶቜ ላይ አይሞኹርም).

እንዎት እንደሚሰራ እንመልኚት፡- hbase.lru.cache.heavy.eviction.mb.size.limit = 500 አዘጋጅተናል እንበል፣ አንድ ዓይነት ጭነት (ማንበብ) አለ ኚዚያም በዹ~10 ሰኚንድ ምን ያህል ባይት እንደተባሚሚ እናሰላለን። በቀመር፡-

ኹአቅም በላይ = ዹተለቀቀው ባይት ድምር (ሜባ) * 100 / ገደብ (ሜባ) - 100;

በእውነቱ 2000 ሜባ ኚተባሚሩ ፣ ኚዚያ በላይ ያለው ክፍያ ኚሚኚተሉት ጋር እኩል ነው

2000 * 100/500 - 100 = 300%

አልጎሪዝም ኚጥቂት አስር በመቶ ያልበለጠ ለመደገፍ ይሞክራል፣ስለዚህ ባህሪው ዚተሞጎጡ ብሎኮቜን መቶኛ ይቀንሳል፣በዚህም ዚራስ-ማስተካኚያ ዘዮን ተግባራዊ ያደርጋል።

ነገር ግን፣ ጭነቱ ኚቀነሰ፣ 200 ሜጋ ባይት ብቻ ተባሚሚ እና ኩቹር ሄድ አሉታዊ ይሆናል (ኹመጠን በላይ መተኮስ ዚሚባለው) እንበል፡-

200 * 100/500 - 100 = -60%

ያ ባህሪ፣ በተቃራኒው ዚተሞጎጡ ብሎኮቜ መቶኛን ይጚምራል Overhead አዎንታዊ እስኪሆን ድሚስ።

ኚታቜ በእውነተኛ ውሂብ ላይ እንዎት እንደሚታይ ዚሚያሳይ ምሳሌ ነው. 0% ለመድሚስ መሞኹር አያስፈልግም, ዚማይቻል ነው. ኹ 30 - 100% ገደማ በሚሆንበት ጊዜ በጣም ጥሩ ነው, ይህ በአጭር ጊዜ ፍንዳታ ጊዜ ኚማመቻ቞ት ሁነታ ያለጊዜው መውጣትን ለማስወገድ ይሚዳል.

hbase.lru.cache.ኚባድ.ማስወጣት.ኹላይ.አካፋይ - ውጀቱን ምን ያህል በፍጥነት ማግኘት እንደምንፈልግ ያዘጋጃል። ዚእኛ ንባቊቜ በአብዛኛው ሹጅም እንደሆኑ እና መጠበቅ እንደማንፈልግ በእርግጠኝነት ካወቅን ይህንን ምክንያት ማሳደግ እና ኹፍተኛ አፈፃፀም በፍጥነት ማግኘት እንቜላለን።

ለምሳሌ, ይህንን ቅንጅት = 0.01 አዘጋጅተናል. ይህ ማለት ኊቚርሄድ (ኹላይ ይመልኚቱ) በውጀቱ በዚህ ቁጥር ይባዛል እና ዚተሞጎጡ ብሎኮቜ መቶኛ ይቀንሳል። እንበል ኊቚርሄድ = 300%፣ እና ኮፊሞን = 0.01፣ ኚዚያ ዚተሞጎጡ ብሎኮቜ መቶኛ በ3% ይቀንሳል።

ተመሳሳይ “ዹኋላ ግፊት” አመክንዮ እንዲሁ ኹመጠን በላይ መተኮስን አሉታዊ እሎቶቜን ይተገበራል። ዹአጭር ጊዜ ዚንባብ መጠን መለዋወጥ እና ማስወጣት ሁል ጊዜ ሊኖሩ ስለሚቜሉ ይህ ዘዮ ኚማመቻ቞ት ሁነታ ያለጊዜው መውጣትን ለማስወገድ ያስቜላል። Backpressure ዹተገለበጠ አመክንዮ አለው፡ ኹመጠን በላይ መተኮሱ በጠነኹሹ መጠን ብዙ ብሎኮቜ ይሞጎጣሉ።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 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 ደቂቃዎቜ በኋላ, ባለብዙ-ግኝቶቜን ያጥፉ (ስካን ብቻ እንደገና ይቀራል)

ሁለት ሩጫዎቜን እናደርጋለን በመጀመሪያ hbase.lru.cache.heavy.eviction.count.limit = 10000 (ይህም ባህሪውን በትክክል ያሰናክላል) እና ኚዚያም ገደብ = 0 አዘጋጅተናል (ያነቃል።)

ኚታቜ ባሉት ምዝግብ ማስታወሻዎቜ ውስጥ, ባህሪው እንዎት እንደሚበራ እናያለን, Overshootingን ወደ 14-71% ዳግም ያስጀምሚዋል. ኹጊዜ ወደ ጊዜ ጭነቱ ይወድቃል, ይህም Backpressureን ያበራል እና HBase ተጚማሪ ብሎኮቜን እንደገና ያበራል.

ዹክልል አገልጋይ መዝገብ
ዚተባሚሚ (ሜባ): 0፣ ሬሟ 0.0፣ ኚአናት (%): -100፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 0፣ ዹአሁኑ መሞጎጫ DataBlock (%): 100
ዚተባሚሚ (ሜባ): 0፣ ሬሟ 0.0፣ ኚአናት (%): -100፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 0፣ ዹአሁኑ መሞጎጫ DataBlock (%): 100
ዚተባሚሚ (ሜባ)፡ 2170፣ ጥምርታ 1.09፣ ኚአናት (%)፡ 985፣ ኚባድ ዚማስለቀቂያ ቆጣሪ፡ 1፣ ዹአሁኑ መሞጎጫ DataBlock (%)፡ 91 <ጅምር
ዚተባሚሚ (ሜባ)፡ 3763፣ ጥምርታ 1.08፣ ኚአናት (%)፡ 1781፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 2፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 76
ዚተባሚሚ (ሜባ)፡ 3306፣ ጥምርታ 1.07፣ ኚአናት (%)፡ 1553፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 3፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 61
ዚተባሚሚ (ሜባ)፡ 2508፣ ጥምርታ 1.06፣ ኚአናት (%)፡ 1154፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 4፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 50
ዚተባሚሚ (ሜባ)፡ 1824፣ ጥምርታ 1.04፣ ኚአናት (%)፡ 812፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 5፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 42
ዚተባሚሚ (ሜባ)፡ 1482፣ ጥምርታ 1.03፣ ኚአናት (%)፡ 641፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 6፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 36
ዚተባሚሚ (ሜባ)፡ 1140፣ ጥምርታ 1.01፣ ኚአናት (%)፡ 470፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 7፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 32
ዚተባሚሚ (ሜባ)፡ 913፣ ጥምርታ 1.0፣ ኚአናት (%)፡ 356፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 8፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 29
ዚተባሚሚ (ሜባ)፡ 912፣ ጥምርታ 0.89፣ ኚአናት (%)፡ 356፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 9፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 26
ዚተባሚሚ (ሜባ)፡ 684፣ ጥምርታ 0.76፣ ኚአናት (%)፡ 242፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 10፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 24
ዚተባሚሚ (ሜባ)፡ 684፣ ጥምርታ 0.61፣ ኚአናት (%)፡ 242፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 11፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.51፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 12፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 21
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.42፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 13፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 20
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 14፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 15፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.32፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 16፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.31፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 17፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.3፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 18፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.29፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 19፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.27፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 20፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.25፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 21፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.24፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 22፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.22፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 23፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.21፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 24፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.2፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 25፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.17፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 26፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ): 456፣ ሬሟ 0.17፣ ኚአናት (%): 128፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 27፣ ዹአሁኑ መሞጎጫ DataBlock (%): 18 < ታክሏል ያገኛል (ነገር ግን ሠንጠሚዥ አንድ ነው)
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.15፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 28፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.13፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 29፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.11፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 30፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.09፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 31፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.08፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 32፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.07፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 33፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.06፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 34፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.05፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 35፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.05፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 36፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.04፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 37፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 109፣ ሬሟ 0.04፣ ኚራስ በላይ (%): -46፣ ኚባድ ዚማስለቀቂያ ቆጣሪ፡ 37፣ ዹአሁኑ መሞጎጫ DataBlock (%)፡ 22 <ዹኋላ ግፊት
ዚተባሚሚ (ሜባ)፡ 798፣ ጥምርታ 0.24፣ ኚአናት (%)፡ 299፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 38፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 20
ዚተባሚሚ (ሜባ)፡ 798፣ ጥምርታ 0.29፣ ኚአናት (%)፡ 299፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 39፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 570፣ ጥምርታ 0.27፣ ኚአናት (%)፡ 185፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 40፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 17
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.22፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 41፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.16፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 42፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.11፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 43፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.09፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 44፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.07፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 45፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.05፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 46፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ)፡ 222፣ ጥምርታ 0.04፣ ኚአናት (%)፡ 11፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 47፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 16
ዚተባሚሚ (ሜባ): 104፣ ሬሟ 0.03፣ ኚአናት (%): -48፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 47፣ ዹአሁኑ መሞጎጫ DataBlock (%): 21 <ማቋሚጥ ያገኛል
ዚተባሚሚ (ሜባ)፡ 684፣ ጥምርታ 0.2፣ ኚአናት (%)፡ 242፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 48፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 19
ዚተባሚሚ (ሜባ)፡ 570፣ ጥምርታ 0.23፣ ኚአናት (%)፡ 185፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 49፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.22፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 50፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.21፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 51፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.2፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 52፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.18፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 53፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.16፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 54፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 228፣ ጥምርታ 0.14፣ ኚአናት (%)፡ 14፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 55፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 18
ዚተባሚሚ (ሜባ)፡ 112፣ ሬሟ 0.14፣ ኚራስ በላይ (%): -44፣ ኚባድ ዚማስለቀቂያ ቆጣሪ፡ 55፣ ዹአሁኑ መሞጎጫ DataBlock (%)፡ 23 <ዹኋላ ግፊት
ዚተባሚሚ (ሜባ)፡ 456፣ ጥምርታ 0.26፣ ኚአናት (%)፡ 128፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 56፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.31፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 57፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 58፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 59፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 60፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 61፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 62፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 63፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.32፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 64፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 65፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 66፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.32፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 67፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 68፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.32፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 69፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.32፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 70፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 71፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 72፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 73፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 74፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 75፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ)፡ 342፣ ጥምርታ 0.33፣ ኚአናት (%)፡ 71፣ ኚባድ ዚማስወጣት ቆጣሪ፡ 76፣ ዹአሁን መሞጎጫ DataBlock (%)፡ 22
ዚተባሚሚ (ሜባ): 21፣ ሬሟ 0.33፣ ኚአናት (%): -90፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 76፣ ዹአሁኑ መሞጎጫ DataBlock (%): 32
ዚተባሚሚ (ሜባ): 0፣ ሬሟ 0.0፣ ኚአናት (%): -100፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 0፣ ዹአሁኑ መሞጎጫ DataBlock (%): 100
ዚተባሚሚ (ሜባ): 0፣ ሬሟ 0.0፣ ኚአናት (%): -100፣ ኚባድ ዚማስለቀቂያ ቆጣሪ: 0፣ ዹአሁኑ መሞጎጫ DataBlock (%): 100

ፍተሻው ዚሚያስፈልገው ተመሳሳይ ሂደትን በመሞጎጫው ሁለት ክፍሎቜ መካኚል ያለውን ግንኙነት በግራፍ መልክ ለማሳዚት ነው - ነጠላ (ማንም እስካሁን ያልጠዚቀባ቞ው ብሎኮቜ) እና ብዙ (“ዹተጠዹቀው” ውሂብ ቢያንስ አንድ ጊዜ። እዚህ ተኚማቜተዋል):

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እና በመጚሚሻም, መለኪያዎቜ በግራፍ መልክ እንዎት እንደሚሠሩ. ለማነፃፀር ፣መሞጎጫው መጀመሪያ ላይ ሙሉ በሙሉ ጠፍቷል ፣ኚዚያም ዹ HBase ጅምር በመሞጎጥ እና ዚማመቻ቞ት መጀመሪያ በ 5 ደቂቃዎቜ (30 ዚማስወጣት ዑደቶቜ) መዘግዚት ነበር።

ሙሉ ኮድ በ Pull Request ውስጥ ይገኛል። HBASE-23887 በ github ላይ።

ነገር ግን በሎኮንድ 300 ሺህ ንባቊቜ በእነዚህ ሁኔታዎቜ ውስጥ በዚህ ሃርድዌር ላይ ሊጹመቁ ዚሚቜሉት ብቻ አይደሉም። እውነታው ግን በኀቜዲኀፍኀስ በኩል መሹጃን ማግኘት ሲፈልጉ ዹ ShortCircuitCache (ኹዚህ በኋላ SSC) ዘዮ ጥቅም ላይ ይውላል, ይህም ዚአውታሚ መሚብ ግንኙነቶቜን በማስወገድ በቀጥታ መሹጃን ለመድሚስ ያስቜላል.

ፕሮፋይሊንግ እንደሚያሳዚው ይህ ዘዮ ትልቅ ትርፍ ቢያስገኝም, በተወሰነ ጊዜም ማነቆ ይሆናል, ምክንያቱም ሁሉም ማለት ይቻላል ኚባድ ስራዎቜ በመቆለፊያ ውስጥ ይኚሰታሉ, ይህም ብዙ ጊዜ ወደ መቆለፊያዎቜ ይመራል.

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 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)];
}

አሁን መሞኹር መጀመር ይቜላሉ። ይህንን ለማድሚግ, ፋይሎቜን ኚኀቜዲኀፍኀስ በቀላል ባለ ብዙ ክር መተግበሪያ እናነባለን. መለኪያዎቜን እናዘጋጃለን-

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 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ግራፉን እንዎት ማንበብ ይቻላል፡ 100k በ64K blocks በአንድ መሞጎጫ ንባብ ለመጚሚስ 78 ሰኚንድ ይወስዳል። በ5 መሞጎጫዎቜ 16 ሰኚንድ ይወስዳል። እነዚያ። ~ 5 ጊዜ ማፋጠን አለ። ኚግራፉ ላይ እንደምታዩት በትንሜ ትይዩ ንባቊቜ ላይ ውጀቱ ብዙም አይታይም ፣ ክሩ ሲነበብ ኹ 50 በላይ በሆነ ጊዜ ጉልህ ሚና መጫወት ይጀምራል ። በተጚማሪም ዚኀስ.ኀስ.ሲ. 6 እና ኚዚያ በላይ በኹፍተኛ ሁኔታ ያነሰ ዹአፈፃፀም ትርፍ ይሰጣል።

ማስታወሻ 1 ዹፈተና ውጀቶቹ በጣም ተለዋዋጭ ስለሆኑ (ኹዚህ በታቜ ይመልኚቱ) ፣ 3 ጅምር ተካሂደዋል እና ዚተገኙት እሎቶቜ አማካይ ና቞ው።

ማስታወሻ 2፡ ኹዘፈቀደ መዳሚሻ መቌት ዹተገኘው ዚአፈጻጞም ትርፍ ተመሳሳይ ነው፣ ምንም እንኳን መዳሚሻው ራሱ ትንሜ ቀርፋፋ ነው።

ሆኖም፣ ኹHBase ጋር ካለው ሁኔታ በተለዹ ይህ ማጣደፍ ሁልጊዜ ነፃ እንዳልሆነ መገለጜ አለበት። እዚህ እኛ በመቆለፊያዎቜ ላይ ኹመንጠልጠል ይልቅ ዚሲፒዩውን ስራ ዚመስራት ቜሎታን ዹበለጠ "መክፈት" አለብን።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እዚህ በአጠቃላይ ፣ ዚመሞጎጫዎቜ ብዛት መጹመር በሲፒዩ አጠቃቀም ላይ በግምት ተመጣጣኝ ጭማሪ እንደሚሰጥ ማዚት ይቜላሉ። ይሁን እንጂ በርካታ ተጚማሪ አሾናፊ ጥምሚት አሉ.

ለምሳሌ፣ ቅንብሩን ጠለቅ ብለን እንመልኚተው SSC = 3. በክልል ላይ ያለው ዚአፈጻጞም ጭማሪ 3.3 ጊዜ ያህል ነው። ኹዚህ በታቜ ያሉት ዚሶስቱም ዚተለያዩ ሩጫዎቜ ውጀቶቜ ና቞ው።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

ዚሲፒዩ ፍጆታ በ2.8 ጊዜ ገደማ ያድጋል። ልዩነቱ በጣም ትልቅ አይደለም፣ ነገር ግን ትንሜዬ Greta ደስተኛ ነቜ እና ምናልባት ትምህርት ቀት እና ትምህርቶቜን ለመኚታተል ጊዜ ሊኖር ይቜላል።

ስለዚህ ይህ HDFS ዹጅምላ መዳሚሻን (ለምሳሌ ስፓርክ ወዘተ) በሚጠቀም ማንኛውም መሳሪያ ላይ አወንታዊ ተጜእኖ ይኖሚዋል፣ ዚመተግበሪያው ኮድ ቀላል ኹሆነ (ማለትም በኀቜዲኀፍኀስ ደንበኛ በኩል መሰካት) እና ነፃ ዚሲፒዩ ሃይል እስካለ ድሚስ። ለመፈተሜ፣ ኹHBase ለማንበብ ዹBlockCache ማመቻ቞ት እና SSC ማስተካኚል ምን ውጀት እንደሚሰጥ እንፈትሜ።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እዚህ ማዚት ይቜላሉ እንደዚህ ባሉ ሁኔታዎቜ ውጀቱ እንደ ዚተጣራ ሙኚራዎቜ (ያለ ምንም ሂደት ማንበብ) ትልቅ አይደለም ፣ ግን እዚህ ተጚማሪ 80 ኪ. አንድ ላይ፣ ሁለቱም ማትባቶቜ እስኚ 4 ጊዜ ፍጥነትን ይሰጣሉ።

ለዚህ ማመቻ቞ት PR ተሠርቷል። [ኀቜዲኀፍኀስ-15202]ዹተዋሃደ እና ይህ ተግባር ወደፊት በሚለቀቁት እትሞቜ ላይ ይገኛል።

እና በመጚሚሻም፣ ተመሳሳይ ሰፊ-አምድ ዳታቀዝ ካሳንድራ እና ኀቜቀዝ ዚንባብ አፈጻጞምን ማወዳደር አስደሳቜ ነበር።

ይህንን ለማድሚግ፣ ዹመደበኛው ዹYCSB ጭነት መሞኚሪያ መገልገያ አጋጣሚዎቜ ኚሁለት አስተናጋጆቜ (በአጠቃላይ 800 ክሮቜ) ተጀምሚዋል። በአገልጋይ በኩል - 4 ዹRegionalServer እና ካሳንድራ በ 4 አስተናጋጆቜ ላይ (ደንበኞቜ ተጜኖአ቞ውን ለማስወገድ በሚሮጡበት አይደለም)። ንባቊቜ ኹመጠኑ ሠንጠሚዊቜ መጡ፡-

HBase - 300 ጊባ በኀቜዲኀፍኀስ (100 ጂቢ ጥሬ መሹጃ)

ካሳንድራ - 250 ጊባ (ማባዛት ምክንያት = 3)

እነዚያ። መጠኑ ተመሳሳይ ነበር (በHBase ትንሜ ተጚማሪ)።

ዹ Hbase አማራጮቜ

dfs.client.short.circuit.num = 5 (HDFS ደንበኛ ማመቻ቞ት)

hbase.lru.cache.heavy.eviction.count.limit = 30 - ይህ ማለት ማጣበቂያው ኹ 30 ማባሚር በኋላ መሥራት ይጀምራል (~ 5 ደቂቃዎቜ)

hbase.lru.cache.ኚባድ.ማስወጣት.mb.size.limit = 300 - ዚመሞጎጫ እና ዚማስወጣት ዒላማ መጠን

ዹYCSB ምዝግብ ማስታወሻዎቜ ተተንትነው ወደ ኀክሎል ገበታዎቜ ተሰብስበዋል።

ዚንባብ ፍጥነት ኹHBase እስኚ 3 ጊዜ እና ኚኀቜዲኀፍኀስ እስኚ 5 ጊዜ እንዎት እንደሚጚምር

እንደሚመለኚቱት ፣ ዚማመቻ቞ት መሹጃው በእነዚህ ሁኔታዎቜ ውስጥ ዚእነዚህን ዚውሂብ ጎታዎቜ አፈፃፀም እኩል ለማድሚግ እና በሰኚንድ 450 ንባቊቜን ለማሳካት ያስቜላል።

ይህ መሹጃ ለአፈፃፀም በሚያስደስት ትግል ሂደት ውስጥ ለአንድ ሰው ጠቃሚ ሊሆን እንደሚቜል ተስፋ እናደርጋለን።

ምንጭ: hab.com

አስተያዚት ያክሉ