ããã«ã¡ã¯ç§ã®åå㯠Danil Lipovoy ã§ããSbertech ã®ããŒã ã¯ãéçšããŒã¿ã®ã¹ãã¬ãŒãžãšã㊠HBase ã®äœ¿çšãéå§ããŸããã ãããå匷ããéçšã§ãäœç³»åããŠèª¬æããããšæãçµéšãèç©ãããŸããïŒå€ãã®äººã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãïŒã 以äžã®ãã¹ãŠã®å®éšã¯ãHBase ããŒãžã§ã³ 1.2.0-cdh5.14.2 ããã³ 2.0.0-cdh6.0.0-beta1 ã䜿çšããŠå®è¡ãããŸããã
- äžè¬çãªã¢ãŒããã¯ãã£
- HBASE ãžã®ããŒã¿ã®æžã蟌ã¿
- HBASE ããã®ããŒã¿ã®èªã¿åã
- ããŒã¿ãã£ãã·ã³ã°
- ãããããŒã¿åŠç MultiGet/MultiPut
- ããŒãã«ãé åã«åå²ããæŠç¥ (åå²)
- èé害æ§ãã³ã³ãã¯ãåãããŒã¿ã®å±ææ§
- èšå®ãšããã©ãŒãã³ã¹
- ã¹ãã¬ã¹ãã¹ã
- æèŠ
1. äžè¬çãªã¢ãŒããã¯ãã£
ããã¯ã¢ãã ãã¹ã¿ãŒã¯ãZooKeeper ããŒãäžã®ã¢ã¯ãã£ã ãã¹ã¿ãŒã®ããŒãããŒãããªãã¹ã³ããæ¶æ»
ããå Žåã«ã¯ãã¹ã¿ãŒã®æ©èœãåŒãç¶ããŸãã
2. HBASE ãžã®ããŒã¿ã®æžã蟌ã¿
ãŸããæãåçŽãªã±ãŒã¹ãã€ãŸã put(rowkey) ã䜿çšããŠããŒãšå€ã®ãªããžã§ã¯ããããŒãã«ã«æžã蟌ãã±ãŒã¹ãèŠãŠã¿ãŸãããã ã¯ã©ã€ã¢ã³ãã¯ãŸããhbase:meta ããŒãã«ãä¿åããã«ãŒãé åãµãŒã㌠(RRS) ãã©ãã«ãããã調ã¹ãå¿ èŠããããŸãã 圌ã¯ãã®æ å ±ã ZooKeeper ããåãåããŸãã ãã®åŸãRRS ã«ã¢ã¯ã»ã¹ããhbase:meta ããŒãã«ãèªã¿åããããããã察象ã®ããŒãã«å ã®ç¹å®ã®è¡ããŒã®ããŒã¿ã®æ ŒçŽãæ åœãã RegionServer (RS) ã«é¢ããæ å ±ãæœåºããŸãã å°æ¥ã®äœ¿çšã«åããŠãã¡ã¿ ããŒãã«ã¯ã¯ã©ã€ã¢ã³ãã«ãã£ãŠãã£ãã·ã¥ããããããåŸç¶ã®åŒã³åºã㯠RS ã«çŽæ¥éä¿¡ãããããéãè¡ãããŸãã
次ã«ããªã¯ãšã¹ããåãåã£ã RS ã¯ããŸãã¯ã©ãã·ã¥æã®åŸ©æ§ã«å¿ èŠãª WriteAheadLog (WAL) ã«ãªã¯ãšã¹ããæžã蟌ã¿ãŸãã 次ã«ãããŒã¿ã MemStore ã«ä¿åããŸãã ããã¯ãç¹å®ã®é åã®ãœãŒããããããŒã®ã»ãããå«ãã¡ã¢ãªå ã®ãããã¡ãŒã§ãã ããŒãã«ã¯è€æ°ã®é å (ããŒãã£ã·ã§ã³) ã«åå²ã§ããåé åã«ã¯äºãã«çŽ ãªããŒã®ã»ãããå«ãŸããŸãã ããã«ããããªãŒãžã§ã³ãç°ãªããµãŒããŒã«é 眮ããŠãããé«ãããã©ãŒãã³ã¹ãå®çŸã§ããŸãã ãã ãããã®ã¹ããŒãã¡ã³ãã®æçœãã«ãããããããããããã¹ãŠã®å Žåã«æ©èœããããã§ã¯ãªãããšãåŸã§ããããŸãã
MemStore ã«ãšã³ããªãé 眮ãããšããšã³ããªãæ£åžžã«ä¿åããããšããå¿çãã¯ã©ã€ã¢ã³ãã«è¿ãããŸãã ãã ããå®éã«ã¯ãããŒã¿ã¯ãããã¡ã«ã®ã¿ä¿åãããäžå®ã®æéãçµéããåŸããŸãã¯ãã£ã¹ã¯ãæ°ããããŒã¿ã§æºããããå Žåã«ã®ã¿ãã£ã¹ã¯ã«æ ŒçŽãããŸãã
ãåé€ãæäœãè¡ã£ãå ŽåãããŒã¿ã¯ç©ççã«åé€ãããŸããã ãããã¯åçŽã«åé€æžã¿ãšããŠããŒã¯ãããç Žæ£èªäœã¯äž»èŠãªã³ã³ãã¯ãé¢æ°ãåŒã³åºããç¬éã«è¡ãããŸããããã«ã€ããŠã¯æ®µèœ 7 ã§è©³ãã説æããŸãã
HFile 圢åŒã®ãã¡ã€ã«ã¯ HDFS ã«èç©ãããææãäœãåé€ããã«å°ããªãã¡ã€ã«ã倧ããªãã¡ã€ã«ã«ããŒãžãããã€ã㌠ã³ã³ãã¯ã ããã»ã¹ãèµ·åãããŸãã æéãçµã€ãšãããã¯ããŒã¿ã®èªã¿åãæã«ã®ã¿çºçããåé¡ã«ãªããŸã (ããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸã)ã
äžã§èª¬æããããŒã ããã»ã¹ã«å ããŠãã¯ããã«å¹æçãªæé ããããããããããããã®ããŒã¿ããŒã¹ã®æã匷åãªåŽé¢ã§ãã BulkLoad ã§ãã ããã¯ãHFile ãç¬èªã«äœæããŠãã£ã¹ã¯ã«é 眮ããããšã§ãå®å šã«æ¡åŒµããéåžžã«ãŸãšããªé床ãéæã§ãããšããäºå®ã«ãããŸãã å®éãããã§ã®å¶é㯠HBase ã§ã¯ãªããããŒããŠã§ã¢ã®æ©èœã§ãã 以äžã¯ã16 åã® RegionalServer ãš 16 åã® NodeManager YARN (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã)ãHBase ããŒãžã§ã³ 1.2.0-cdh5.14.2 ã§æ§æãããã¯ã©ã¹ã¿ãŒã§ã®ããŒãçµæã§ãã
ããã§ã¯ãããŒãã«å
ã®ããŒãã£ã·ã§ã³ (ãªãŒãžã§ã³) ã®æ°ãš Spark ãšã°ãŒãã¥ãŒã¿ã®æ°ãå¢ããããšã§ãããŠã³ããŒãé床ãåäžããããšãããããŸãã ãŸããé床ã¯é²é³é³éã«ãã£ãŠç°ãªããŸãã 倧ããªãããã¯ã§ã¯ MB/ç§ãå¢å ããå°ããªãããã¯ã§ã¯åäœæéãããã«æ¿å
¥ãããã¬ã³ãŒãã®æ°ãå¢å ããŸãããã®ä»ã®æ¡ä»¶ã¯ãã¹ãŠåãã§ãã
10 ã€ã®ããŒãã«ãžã®ããŒããåæã«éå§ããŠãé床ã 600 åã«ããããšãã§ããŸãã 以äžã§ã¯ã1275 ã€ã®ããŒãã«ãžã® 623 KB ãããã¯ã®æžã蟌ã¿ãããããçŽ 11 MB/ç§ (åèš XNUMX MB/ç§) ã®é床ã§äžåºŠã«è¡ãããããšãããããŸããããã¯ãXNUMX ã€ã®ããŒãã«ãžã®æžã蟌ã¿é床 XNUMX MB/ç§ãšäžèŽããŸã (ãäžèšNo.XNUMX)
ãããã50 KB ã®ã¬ã³ãŒããå«ã XNUMX åç®ã®å®è¡ã§ã¯ãããŠã³ããŒãé床ããããã«å¢å ããŠããããšãããããå¶éå€ã«è¿ã¥ããŠããããšãããããŸãã åæã«ãHBASE èªäœã«ã¯å®è³ªçã«è² è·ãçºçããªãããšã«çæããå¿
èŠããããŸããå¿
èŠãªã®ã¯ãæåã« hbase:meta ããããŒã¿ãäžããHFiles ãã©ã€ãã³ã°ããåŸãBlockCache ããŒã¿ããªã»ããããŠã空ã§ãªãå Žåã¯ãMemStore ãããã¡ããã£ã¹ã¯ã«ä¿åããŸãã
3. HBASE ããã®ããŒã¿ã®èªã¿åã
ã¯ã©ã€ã¢ã³ãã hbase:meta ããã®ãã¹ãŠã®æ å ±ããã§ã«æã£ãŠãããšä»®å®ãããš (ãã€ã³ã 2 ãåç §)ããªã¯ãšã¹ãã¯å¿ èŠãªããŒãä¿åãããŠãã RS ã«çŽæ¥éãããŸãã ãŸããMemCache ã§æ€çŽ¢ãå®è¡ãããŸãã ããã«ããŒã¿ããããã©ããã«é¢ä¿ãªããæ€çŽ¢ã¯ BlockCache ãããã¡ãŒã§ãå®è¡ãããå¿ èŠã«å¿ã㊠HFiles ã§ãââå®è¡ãããŸãã ãã¡ã€ã«å ã§ããŒã¿ãèŠã€ãã£ãå Žåããã®ããŒã¿ã¯ BlockCache ã«é 眮ããã次ã®ãªã¯ãšã¹ãã§ããéãè¿ãããŸãã HFile ã§ã®æ€çŽ¢ã¯ããã«ãŒã ãã£ã«ã¿ãŒã®äœ¿çšã«ããæ¯èŒçé«éã§ãã å°éã®ããŒã¿ãèªã¿åããšããã®ãã¡ã€ã«ã«å¿ èŠãªããŒãå«ãŸããŠãããã©ãããããã«å€æãããå«ãŸããŠããªãå Žåã¯æ¬¡ã®ããŒã«é²ã¿ãŸãã
ããã XNUMX ã€ã®ãœãŒã¹ããããŒã¿ãåä¿¡ãããšãRS ã¯å¿çãçæããŸãã ç¹ã«ãã¯ã©ã€ã¢ã³ããããŒãžã§ã³ç®¡çãèŠæ±ããå Žåã¯ãèŠã€ãã£ããªããžã§ã¯ãã®è€æ°ã®ããŒãžã§ã³ãäžåºŠã«è»¢éã§ããŸãã
4. ããŒã¿ã®ãã£ãã·ã¥
MemStore ãããã¡ãš BlockCache ãããã¡ã¯ãå²ãåœãŠããããªã³ããŒã RS ã¡ã¢ãªã®æ倧 80% ãå æããŸã (æ®ã㯠RS ãµãŒãã¹ ã¿ã¹ã¯çšã«äºçŽãããŠããŸã)ã äžè¬çãªäœ¿çšã¢ãŒãããããã»ã¹ãåãããŒã¿ãæžã蟌ã¿ãããã«èªã¿åããããªãã®ã§ããå ŽåãBlockCache ãæžãã㊠MemStore ãå¢ããããšã¯çã«ããªã£ãŠããŸãã æžã蟌ã¿ããŒã¿ãèªã¿åãçšã®ãã£ãã·ã¥ã«å ¥ããããªãå ŽåãBlockCache ã®äœ¿çšé »åºŠã¯äœããªããŸãã BlockCache ãããã¡ã¯ãLruBlockCache (åžžã«ãªã³ããŒã) ãš BucketCache (éåžžã¯ãªãããŒããŸã㯠SSD äž) ã® 8 ã€ã®éšåã§æ§æãããŸãã BucketCache ã¯ã倧éã®èªã¿åããªã¯ãšã¹ãããããLruBlockCache ã«åãŸããªãå Žåã«äœ¿çšããå¿ èŠããããŸããããã«ãããã¬ããŒãž ã³ã¬ã¯ã¿ãŒãã¢ã¯ãã£ãã«åäœããŸãã åæã«ãèªã¿åããã£ãã·ã¥ã®äœ¿çšã«ããããã©ãŒãã³ã¹ã®æ¥æ¿ãªåäžãæåŸ ã§ããŸããããããã«ã€ããŠã¯æ®µèœ XNUMX ã§æ»ããŸãã
RS å
šäœã« XNUMX ã€ã® BlockCache ããããããŒãã«ããšã« XNUMX ã€ã® MemStore (åãã¡ããªãŒããšã« XNUMX ã€) ããããŸãã
Ðак
hbase(main):001:0> create 'ns:magic', 'cf'
Created table ns:magic
Took 1.1533 seconds
hbase(main):002:0> put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'
Took 0.2610 seconds
hbase(main):003:0> flush 'ns:magic'
Took 0.6161 seconds
hdfs dfs -mv /data/hbase/data/ns/magic/* /tmp/trash
hbase(main):002:0> get 'ns:magic', 'key1'
cf:c timestamp=1534440690218, value=try_to_delete_me
ãèªã¿åãæã®ããŒã¿ã®ãã£ãã·ã¥ããã©ã¡ãŒã¿ã¯ false ã«èšå®ãããŸãã ã¢ã€ãã¢ãããå Žåã¯ãã³ã¡ã³ãã§è°è«ããŠãã ããã
5. ãããããŒã¿åŠç MultiGet/MultiPut
åäžã®ãªã¯ãšã¹ã (Get/Put/Delete) ã®åŠçã¯éåžžã«è² è·ã®é«ãæäœã§ãããããå¯èœã§ããã°ãããã List ãŸã㯠List ã«çµåããå¿ èŠããããŸããããã«ãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã ããã¯ç¹ã«æžã蟌ã¿æäœã«åœãŠã¯ãŸããŸãããèªã¿åãæã«ã¯æ¬¡ã®ãããªèœãšãç©ŽããããŸãã 以äžã®ã°ã©ãã¯ãMemStore ãã 50 ã¬ã³ãŒããèªã¿åãã®ã«ãããæéã瀺ããŠããŸãã èªã¿åã㯠000 ã€ã®ã¹ã¬ããã§å®è¡ããã暪軞ã¯ãªã¯ãšã¹ãå ã®ããŒã®æ°ã瀺ããŸãã ããã§ã¯ãXNUMX ã€ã®ãªã¯ãšã¹ãã§ããŒã XNUMX åã«å¢å ãããšãå®è¡æéãççž®ãããããšãããããŸãã é床ãäžãããŸãã ãã ããMSLAB ã¢ãŒããããã©ã«ãã§æå¹ã«ãªã£ãŠããå Žåããã®ãããå€ãè¶ ãããšããã©ãŒãã³ã¹ãæ¥æ¿ã«äœäžããã¬ã³ãŒãå ã®ããŒã¿éãå¢ããã»ã©åäœæéãé·ããªããŸãã
ãã¹ãã¯ã8 ã³ã¢ãããŒãžã§ã³ HBase 2.0.0-cdh6.0.0-beta1 ã®ä»®æ³ãã·ã³ã§å®è¡ãããŸããã
MSLAB ã¢ãŒãã¯ãæ°äžä»£ã®ããŒã¿ãšå€ãäžä»£ã®ããŒã¿ãæ··åšããããšã§çºçããããŒãã®æçåã軜æžããããã«èšèšãããŠããŸãã åé¿çãšããŠãMSLAB ãæå¹ãªå ŽåãããŒã¿ã¯æ¯èŒçå°ããªã»ã« (ãã£ã³ã¯) ã«é 眮ããããã£ã³ã¯åäœã§åŠçãããŸãã ãã®çµæãèŠæ±ãããããŒã¿ ãã±ããã®ããªã¥ãŒã ãå²ãåœãŠããããµã€ãºãè¶ ãããšãããã©ãŒãã³ã¹ãæ¥æ¿ã«äœäžããŸãã äžæ¹ããã®ã¢ãŒãããªãã«ããããšããå§ãã§ããŸãããéäžçãªããŒã¿åŠçã®ç¬éã« GC ãåå ã§åæ¢ããå¯èœæ§ãããããã§ãã è¯ã解決çã¯ãèªã¿åããšåæã« put ãä»ããŠã¢ã¯ãã£ãã«æžã蟌ã¿ãè¡ãå Žåã«ã»ã«ã®äœç©ãå¢ããããšã§ãã èšé²åŸã«ãMemStore ããã£ã¹ã¯ã«ãªã»ãããããã©ãã·ã¥ ã³ãã³ããå®è¡ããå ŽåããŸã㯠BulkLoad ã䜿çšããŠããŒãããå Žåã«ã¯ãåé¡ã¯çºçããªãããšã«æ³šæããŠãã ããã 以äžã®è¡šã¯ããã倧ã㪠(åãéã®) ããŒã¿ã MemStore ããã¯ãšãªãããšé床ãäœäžããããšã瀺ããŠããŸãã ãã ãããã£ã³ã¯ãµã€ãºãå¢ãããšãåŠçæéãéåžžã«æ»ããŸãã
ãã£ã³ã¯ãµã€ãºãå¢ããããšã«å ããŠãããŒã¿ããªãŒãžã§ã³ããšã«åå²ãããšå¹æçã§ãã ããŒãã«åå²ã ãã®çµæãåãªãŒãžã§ã³ã«å±ããªã¯ãšã¹ããæžãããªã¯ãšã¹ããã»ã«ã«åãŸãå Žåã§ããå¿çã¯è¯å¥œãªãŸãŸã«ãªããŸãã
6. ããŒãã«ãé åã«åå²ããæŠç¥ (åå²)
HBase ã¯ããŒãšå€ã®ã¹ãã¬ãŒãžã§ãããããŒãã£ã·ã§ã³åå²ã¯ããŒã«ãã£ãŠå®è¡ããããããããŒã¿ããã¹ãŠã®ãªãŒãžã§ã³ã«åçã«åå²ããããšãéåžžã«éèŠã§ãã ããšãã°ããã®ãããªããŒãã«ã XNUMX ã€ã®éšåã«åå²ãããšãããŒã¿ã¯ XNUMX ã€ã®é åã«åå²ãããŸãã
ããšãã°ãåŸã§ããŒããããããŒã¿ãé·ãå€ã§ããããã®ã»ãšãã©ãåãæ¡ã§å§ãŸãå Žåããããæ¥æ¿ãªé床ã®äœäžã«ã€ãªããããšããããŸãã
1000001
1000002
...
1100003
ããŒã¯ãã€ãé åãšããŠæ ŒçŽããããããããŒã¯ãã¹ãŠåãããã«å§ãŸãããã®ç¯å²ã®ããŒãæ ŒçŽããåãé å #1 ã«å±ããŸãã ããã€ãã®ããŒãã£ã·ã§ãã³ã°æŠç¥ããããŸãã
HexStringSplit â ããŒãã00000000ã => ãFFFFFFFFãã®ç¯å²ã® XNUMX é²æ°ã§ãšã³ã³ãŒããããæååã«å€æããå·ŠåŽããŒãã§ããã£ã³ã°ããŸãã
UniformSplit â ããŒããã00ã => ãFFãã®ç¯å²ã® XNUMX é²ãšã³ã³ãŒããšå³åŽã®ãŒã ããã£ã³ã°ã䜿çšãããã€ãé åã«å€æããŸãã
ããã«ãåå²ããä»»æã®ç¯å²ãŸãã¯ããŒã®ã»ãããæå®ããèªååå²ãæ§æã§ããŸãã ãã ããæãã·ã³ãã«ã§å¹æçãªã¢ãããŒãã® 32 ã€ã¯ãUniformSplit ãšããã·ã¥é£çµã®äœ¿çšã§ããããšãã°ãCRCXNUMX(rowkey) é¢æ°ã«ããããŒã®å®è¡ããã®æãéèŠãªãã€ãã®ãã¢ãšè¡ããŒèªäœã§ãã
ããã·ã¥ + è¡ããŒ
ããããã°ããã¹ãŠã®ããŒã¿ããªãŒãžã§ã³éã§åçã«åæ£ãããŸãã èªã¿åãæãæåã® XNUMX ãã€ãã¯åçŽã«ç Žæ£ãããå ã®ããŒã¯æ®ããŸãã RS ã¯ãé åå ã®ããŒã¿ãšããŒã®éãå¶åŸ¡ããå¶éãè¶ ããå Žåã¯èªåçã«éšåã«åå²ããŸãã
7. èé害æ§ãšããŒã¿ã®å±ææ§
åã㌠ã»ãããæ åœãããªãŒãžã§ã³ã¯ XNUMX ã€ã ãã§ãããããRS ã®ã¯ã©ãã·ã¥ãŸãã¯å»æ¢ã«é¢é£ããåé¡ã®è§£æ±ºçã¯ãå¿ èŠãªããŒã¿ããã¹ãŠ HDFS ã«ä¿åããããšã§ãã RS ãäœäžãããšããã¹ã¿ãŒã¯ ZooKeeper ããŒãã«ããŒãããŒãããªãããšã«ãã£ãŠãããæ€åºããŸãã 次ã«ãæäŸãããé åãå¥ã® RS ã«å²ãåœãŠãŸããHFile ã¯åæ£ãã¡ã€ã« ã·ã¹ãã ã«ä¿åãããŠãããããæ°ããææè ãããããèªã¿åããããŒã¿ã®æäŸãç¶ããŸãã ãã ããäžéšã®ããŒã¿ã¯ MemStore ã«ãããHFile ã«åã蟌ãæéããªãã£ãå¯èœæ§ããããããåãã HDFS ã«ä¿åãããŠãã WAL ã䜿çšããŠæäœã®å±¥æŽã埩å ããŸãã å€æŽãé©çšãããåŸãRS ã¯ãªã¯ãšã¹ãã«å¿çã§ããããã«ãªããŸããããã®ç§»åã«ãããäžéšã®ããŒã¿ãšããŒã¿ã«ãµãŒãã¹ãæäŸããããã»ã¹ãå¥ã®ããŒãã«é 眮ãããããšã«ãªããŸãã å°åæ§ãæžã£ãŠããŠããŸãã
ãã®åé¡ã®è§£æ±ºçã¯ã¡ãžã£ãŒ ã³ã³ãã¯ã·ã§ã³ã§ãããã®æé ã§ã¯ããã¡ã€ã«ããã®ãã¡ã€ã«ãæ åœããããŒã (é åãé 眮ãããŠããå Žæ) ã«ç§»åããŸãããã®çµæããã®æé äžã«ãããã¯ãŒã¯ãšãã£ã¹ã¯ã®è² è·ãæ¥æ¿ã«å¢å ããŸãã ãã ããå°æ¥çã«ã¯ãããŒã¿ãžã®ã¢ã¯ã»ã¹ãèããé«éåãããŸãã ããã«ãmajor_compaction ã¯ãé åå ã®ãã¹ãŠã® HFile ã XNUMX ã€ã®ãã¡ã€ã«ã«ããŒãžããããŒãã«èšå®ã«å¿ããŠããŒã¿ãã¯ãªãŒã³ã¢ããããŸãã ããšãã°ãä¿æããå¿ èŠããããªããžã§ã¯ãã®ããŒãžã§ã³æ°ãããªããžã§ã¯ããç©ççã«åé€ããããŸã§ã®åç¶æéãæå®ã§ããŸãã
ãã®æé ã¯ãHBase ã®åäœã«éåžžã«è¯ã圱é¿ãäžããå¯èœæ§ããããŸãã äžã®å³ã¯ãã¢ã¯ãã£ããªããŒã¿èšé²ã®çµæãšããŠããã©ãŒãã³ã¹ãã©ã®ããã«äœäžââãããã瀺ããŠããŸãã ããã§ã¯ã40 åã®ã¹ã¬ããã 40 ã€ã®ããŒãã«ã«ã©ã®ããã«æžã蟌ã¿ãåæã« XNUMX åã®ã¹ã¬ãããããŒã¿ãèªã¿åããã確èªã§ããŸãã æžã蟌ã¿ã¹ã¬ããã¯ãŸããŸãå€ãã® HFile ãçæããä»ã®ã¹ã¬ããã«ãã£ãŠèªã¿åãããŸãã ãã®çµæããŸããŸãå€ãã®ããŒã¿ãã¡ã¢ãªããåé€ããå¿ èŠããããæçµçã«ã¯ GC ãåäœãå§ããå®è³ªçã«ãã¹ãŠã®äœæ¥ã麻çºããŸãã 倧èŠæš¡ãªå§çž®ã®éå§ã«ãããçµæãšããŠçããç Žçãé€å»ãããçç£æ§ãå埩ããŸããã
ãã¹ã㯠3 ã€ã®ããŒã¿ããŒããš 4 ã€ã® RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã) ã§å®è¡ãããŸããã HBase ããŒãžã§ã³ 1.2.0-cdh5.14.2
äž»èŠãªå§çž®ã¯ãããŒã¿ãã¢ã¯ãã£ãã«æžã蟌ãŸãããèªã¿åãããããããã©ã€ããããŒãã«äžã§éå§ãããããšã«æ³šç®ãã䟡å€ããããŸãã ããã«ãããããŒã¿ãèªã¿åããšãã«èª€ã£ãå¿çãçºçããå¯èœæ§ããããšãããäžã§èšè¿°ããããŸããã 確èªããããã«ãæ°ããããŒã¿ãçæããŠããŒãã«ã«æžã蟌ãããã»ã¹ãèµ·åãããŸããã ãã®åŸãããã«èªãã§ãçµæã®å€ãæžãçããããå€ãšäžèŽãããã©ããã確èªããŸããã ãã®ããã»ã¹ã®å®è¡äžã倧èŠæš¡ãªå§çž®ã¯çŽ 200 åå®è¡ãããŸãããã倱æ㯠XNUMX ã€ãèšé²ãããŸããã§ããã ãããããåé¡ãçºçããã®ã¯ãŸãã§ãé«è² è·æã«ã®ã¿çºçãããããèšç»ã©ããã«æžã蟌ã¿ããã³èªã¿åãããã»ã¹ãåæ¢ããã¯ãªãŒãã³ã°ãå®è¡ããŠããã®ãã㪠GC ãããŒããŠã³ãé²ãæ¹ãå®å šã§ãã
ãŸããã¡ãžã£ãŒ ã³ã³ãã¯ã·ã§ã³ã¯ MemStore ã®ç¶æ ã«ã¯åœ±é¿ããŸãããMemStore ããã£ã¹ã¯ã«ãã©ãã·ã¥ããŠå§çž®ããã«ã¯ãflush (connection.getAdmin().flush(TableName.valueOf(tblName))) ã䜿çšããå¿ èŠããããŸãã
8. èšå®ãšæŒå¥
ãã§ã«è¿°ã¹ãããã«ãHBase 㯠BulkLoad ã®å®è¡æã«äœãããå¿ èŠããªãå Žåã«æ倧ã®æåã瀺ããŸãã ãã ããããã¯ã»ãšãã©ã®ã·ã¹ãã ãšäººã«åœãŠã¯ãŸããŸãã ãã ãããã®ããŒã«ã¯ã倧ããªãããã¯ã«å€§éã®ããŒã¿ãä¿åããã®ã«ããé©ããŠããŸãããããã»ã¹ã§è€æ°ã®ç«¶åããèªã¿åãããã³æžã蟌ã¿ãªã¯ãšã¹ããå¿ èŠãªå Žåã¯ãäžèšã® Get ããã³ Put ã³ãã³ãã䜿çšãããŸãã æé©ãªãã©ã¡ãŒã¿ãŒã決å®ããããã«ãããŒãã«ã®ãã©ã¡ãŒã¿ãŒãšèšå®ãããŸããŸã«çµã¿åãããŠèµ·åãå®è¡ãããŸããã
- 10 åã®ã¹ã¬ãããåæã« 3 åé£ç¶ã§èµ·åãããŸãã (ãããã¹ã¬ããã®ãããã¯ãšåŒã³ãŸã)ã
- ãããã¯å ã®ãã¹ãŠã®ã¹ã¬ããã®åäœæéã¯å¹³åããããããã¯ã®åäœã®æçµçµæãšãªããŸããã
- ãã¹ãŠã®ã¹ã¬ãããåãããŒãã«ã§åäœããŸããã
- ã¹ã¬ãã ãããã¯ãéå§ããããã³ã«ã倧èŠæš¡ãªå§çž®ãå®è¡ãããŸããã
- åãããã¯ã¯ã次ã®æäœã®ãã¡ XNUMX ã€ã ããå®è¡ããŸããã
-眮ã
-åŸã
âã²ãã+ããã
- åãããã¯ã¯ããã®æäœã 50 åç¹°ãè¿ãå®è¡ããŸããã
- ã¬ã³ãŒãã®ããã㯠ãµã€ãºã¯ 100 ãã€ãã1000 ãã€ãããŸã㯠10000 ãã€ã (ã©ã³ãã ) ã§ãã
- ãããã¯ã¯ãèŠæ±ãããããŸããŸãªæ°ã®ã㌠(10 ã€ã®ããŒãŸã㯠XNUMX ã€ã®ããŒ) ã§èµ·åãããŸããã
- ãããã¯ã¯ç°ãªãããŒãã«èšå®ã§å®è¡ãããŸããã å€æŽããããã©ã¡ãŒã¿:
â BlockCache = ãªã³ãŸãã¯ãªã
â ãããã¯ãµã€ãº = 65 KB ãŸã㯠16 KB
â ããŒãã£ã·ã§ã³ = 1ã5ããŸã㯠30
â MSLAB = æå¹ãŸãã¯ç¡å¹
ãããã£ãŠããããã¯ã¯æ¬¡ã®ããã«ãªããŸãã
ïœïŒ MSLABã¢ãŒãã®ãªã³/ãªããåãæ¿ããŸããã
b. 次ã®ãã©ã¡ãŒã¿ãèšå®ãããããŒãã«ãäœæãããŸãã: BlockCache = true/noneãBlockSize = 65/16 KbãPartition = 1/5/30ã
c. å§çž®ã¯GZã«èšå®ãããŸããã
d. 10 åã®ã¹ã¬ãããåæã«èµ·åããã1/10/100 ãã€ãã®ã¬ã³ãŒããå«ããã®ããŒãã«ã«å¯Ÿã㊠1000/10000 put/get/get+put æäœãå®è¡ãããé£ç¶ã㊠50 ã¯ãšãªãå®è¡ãããŸãã (ã©ã³ãã ããŒ)ã
e. ãã€ã³ã d ã XNUMX åç¹°ãè¿ããŸããã
f. ãã¹ãŠã®ã¹ã¬ããã®åäœæéãå¹³åããŸããã
èãããããã¹ãŠã®çµã¿åããããã¹ããããŸããã ã¬ã³ãŒã ãµã€ãºãå¢å ãããšé床ãäœäžãããããã£ãã·ã¥ãç¡å¹ã«ãããšé床ãäœäžããããšãäºæž¬ã§ããŸãã ãã ããç®çã¯åãã©ã¡ãŒã¿ãŒã®åœ±é¿ã®çšåºŠãšéèŠæ§ãç解ããããšã§ãã£ããããåéãããããŒã¿ã¯ç·åœ¢ååž°é¢æ°ã®å ¥åã«å ¥åãããt çµ±èšã䜿çšããŠéèŠæ§ãè©äŸ¡ã§ããããã«ãªããŸããã 以äžã¯ãPut æäœãå®è¡ãããããã¯ã®çµæã§ãã çµã¿åããã®ãã«ã»ãã 2*2*3*2*3 = 144 ãªãã·ã§ã³ + 72 tkã ããã€ãã¯216åè¡ãããŸããã ãããã£ãŠãåèš XNUMX åã®å®è¡ãè¡ãããŸãã
ãã¹ãã¯ã3 ã€ã®ããŒã¿ããŒããš 4 ã€ã® RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã) ã§æ§æãããããã¯ã©ã¹ã¿ãŒã§å®è¡ãããŸããã HBase ããŒãžã§ã³ 1.2.0-cdh5.14.2ã
æé«ã®æ¿å
¥é床 3.7 ç§ã¯ãMSLAB ã¢ãŒãããªãã«ããããŒãã£ã·ã§ã³ã 16 ã€ããããŒãã«ã§ãBlockCache ãæå¹ãBlockSize = 100ãã¬ã³ãŒãã 10 ãã€ããããã¯ããã XNUMX åã®å Žåã«åŸãããŸããã
æäœã®æ¿å
¥é床ã§ãã 82.8 ç§ã¯ãMSLAB ã¢ãŒããæå¹ã§ãããŒãã£ã·ã§ã³ã 16 ã€ããããŒãã«ã§ BlockCache ãæå¹ãBlockSize = 10000ã1 ãã€ãã®ã¬ã³ãŒãã XNUMX ã€ããå Žåã«åŸãããŸããã
ããã§ã¯ã¢ãã«ãèŠãŠã¿ãŸãããã R2 ã«åºã¥ãã¢ãã«ã®å質ãåªããŠããããšãããããŸãããããã§ã¯å€æ¿ãçŠå¿ã§ããããšã¯æããã§ãã ãã©ã¡ãŒã¿ãŒãå€åãããšãã®ã·ã¹ãã ã®å®éã®åäœã¯ç·åœ¢ã§ã¯ãããŸããããã®ã¢ãã«ã¯äºæž¬ã®ããã§ã¯ãªããæå®ããããã©ã¡ãŒã¿ãŒå ã§äœãèµ·ãã£ãã®ããç解ããããã«å¿ èŠã§ãã ããšãã°ãããã§ã¯ Student ã®åºæºãããBlockSize ãã©ã¡ãŒã¿ãš BlockCache ãã©ã¡ãŒã¿ã Put æäœã«ã¯éèŠã§ã¯ãªãããšãããããŸã (ããã¯äžè¬ã«éåžžã«äºæž¬å¯èœã§ã)ã
ããããããŒãã£ã·ã§ã³ã®æ°ãå¢ãããšããã©ãŒãã³ã¹ãäœäžãããšããäºå®ã¯ãç解ã§ãããã®ã§ã¯ãããŸãããããã¶ãäºæ³å€ã§ã (BulkLoad ã§ããŒãã£ã·ã§ã³ã®æ°ãå¢ããããšã«ãããã©ã¹ã®åœ±é¿ã¯ãã§ã«ç¢ºèªããŸãã)ã ãŸããåŠçã®ããã«ã30 ã€ã®ãªãŒãžã§ã³ã§ã¯ãªã XNUMX ã®ãªãŒãžã§ã³ã«å¯ŸããŠãªã¯ãšã¹ããçæããå¿
èŠããããŸãããããŒã¿éã¯ããã«ãã£ãŠå©çãåŸãããã»ã©ã§ã¯ãããŸããã 第äºã«ãç·åäœæéã¯æãé
ã RS ã«ãã£ãŠæ±ºå®ãããDataNode ã®æ°ã RS ã®æ°ãããå°ãªããããäžéšã®é åã§ã¯å±ææ§ããŒãã«ãªããŸãã ããã§ã¯ãããã XNUMX ãèŠãŠã¿ãŸãããã
次ã«ãGet ãããã¯ã®å®è¡çµæãè©äŸ¡ããŠã¿ãŸãããã
ããŒãã£ã·ã§ã³ã®æ°ã¯éèŠæ§ã倱ããŸããããããã¯ãããããããŒã¿ãé©åã«ãã£ãã·ã¥ãããèªã¿åããã£ãã·ã¥ãæãéèŠãª (çµ±èšçã«) ãã©ã¡ãŒã¿ãŒã§ãããšããäºå®ã«ãã£ãŠèª¬æãããŸãã åœç¶ã®ããšãªããããªã¯ãšã¹ãå
ã®ã¡ãã»ãŒãžã®æ°ãå¢ããããšãããã©ãŒãã³ã¹ã«éåžžã«åœ¹ç«ã¡ãŸãã ãããã¹ã³ã¢:
ããŠãæåŸã«ãæåã« get ãå®è¡ããŠãã put ãå®è¡ãããããã¯ã®ã¢ãã«ãèŠãŠã¿ãŸãããã
ããã§ã¯ãã¹ãŠã®ãã©ã¡ãŒã¿ãéèŠã§ãã ãããŠãªãŒããŒãã¡ã®çµæã¯æ¬¡ã®ãšããã§ãã
9. è² è·ãã¹ã
ããŠãæçµçã«ã¯å€ããå°ãªãããŸãšããªããŒããéå§ããŸãããæ¯èŒãããã®ããããšåžžã«èå³æ·±ããã®ã«ãªããŸãã Cassandra ã®äž»èŠãªéçºè
ã§ãã DataStax ã® Web ãµã€ãã«ã¯ã次ã®ãšããã§ãã
ç§ãç解ããŠããéããèªã¿åã㯠100 ã¬ã³ãŒãã®ãããã¯ã§å®è¡ããã16 åã® HBase ããŒãã«ã€ããŠãDataStax ãã¹ãã§ã¯ 10 ç§ããã XNUMX åã®æäœã®ããã©ãŒãã³ã¹ã瀺ãããŸããã
ç§ãã¡ã®ã¯ã©ã¹ã¿ãŒã«ã 16 åã®ããŒããããã®ã¯å¹žãã§ãããããããã« 64 åã®ã³ã¢ (ã¹ã¬ãã) ãããã®ã«å¯ŸããDataStax ãã¹ãã§ã¯ 4 åãããªãã®ã¯ããŸãã幞éãã§ã¯ãããŸãããäžæ¹ããããã«ã¯ SSD ãã©ã€ãããããäžæ¹ç§ãã¡ã¯ HDD ãæã£ãŠããŸããæ°ããããŒãžã§ã³ã® HBase ãšè² è·æã® CPU 䜿çšçã¯ãå®éã«ã¯å€§å¹ ã«å¢å ããŸããã§ãã (èŠèŠçã«ã¯ 5 ïœ 10 ããŒã»ã³ã)ã ãã ãããã®æ§æã䜿çšããŠã¿ãŸãããã ããã©ã«ãã®ããŒãã«èšå®ã§ã¯ãèªã¿åã㯠0 ïœ 50 äžã®ããŒç¯å²ã§ã©ã³ãã ã«å®è¡ãããŸã (ã€ãŸããåºæ¬çã«æ¯åæ°ãããã®)ã ããŒãã«ã«ã¯ 50 äžä»¶ã®ã¬ã³ãŒããå«ãŸããŠããã64 ã®ããŒãã£ã·ã§ã³ã«åå²ãããŠããŸãã ããŒã¯ crc32 ã䜿çšããŠããã·ã¥ãããŸãã ããŒãã«èšå®ã¯ããã©ã«ãã§ãMSLAB ãæå¹ã«ãªã£ãŠããŸãã 40 åã®ã¹ã¬ãããèµ·åãããšãåã¹ã¬ãã㯠100 åã®ã©ã³ãã ããŒã®ã»ãããèªã¿åããçæããã 100 ãã€ãããããã®ããŒã«å³åº§ã«æžã蟌ã¿ãŸãã
ã¹ã¿ã³ã: 16 DataNode ããã³ 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã)ã HBase ããŒãžã§ã³ 1.2.0-cdh5.14.2ã
å¹³åçµæ㯠40 ç§ããã 10 ãªãã¬ãŒã·ã§ã³ã«è¿ããDataStax ãã¹ããããå€§å¹ ã«åªããŠããŸãã ãã ããå®éšç®çã§ããã°ãæ¡ä»¶ããããã«å€æŽããããšãã§ããŸãã ãã¹ãŠã®äœæ¥ã 100 ã€ã®ããŒãã«äžã§æä»çã«å®è¡ããããŸãäžæã®ããŒã®ã¿ã§å®è¡ãããå¯èœæ§ã¯ã»ãšãã©ãããŸããã äž»ãªè² è·ãçæããç¹å®ã®ãããããããŒã®ã»ããããããšä»®å®ããŸãããã ãããã£ãŠã4 ã€ã®ç°ãªãããŒãã«ã§ããã倧ããªã¬ã³ãŒã (50 KB) ã®ããŒãã 40 åã®ãããã§äœæããèŠæ±ãããããŒã®ç¯å²ã 100 ã«å¶éããŠã¿ãŸããããäžã®ã°ã©ãã¯ã10 ã¹ã¬ããã®èµ·åã瀺ããŠããŸããåã¹ã¬ããã¯èªã¿åããŸãã XNUMX åã®ããŒã®ã»ãããäœæãããããã®ããŒã«ã©ã³ãã 㪠XNUMX KB ãå³åº§ã«æžã蟌ã¿ãŸãã
ã¹ã¿ã³ã: 16 DataNode ããã³ 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã)ã HBase ããŒãžã§ã³ 1.2.0-cdh5.14.2ã
ããŒãäžã«ãäžã«ç€ºããããã«ã¡ãžã£ãŒ ã³ã³ãã¯ã·ã§ã³ãæ°åèµ·åãããŸãããã®æé ãè¡ããªããšãããã©ãŒãã³ã¹ã¯åŸã ã«äœäžããŸãããå®è¡äžã«è¿œå ã®è² è·ãçºçããŸãã ãããŒããŠã³ã¯ããŸããŸãªçç±ã§çºçããŸãã å Žåã«ãã£ãŠã¯ãã¹ã¬ãããåäœãçµäºããåèµ·åäžã«äžæåæ¢ãçºçãããããµãŒãããŒãã£ã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ã©ã¹ã¿ãŒã«è² è·ãçºçãããããããšããããŸããã
èªã¿åã£ãŠããã«æžã蟌ãããšã¯ãHBase ã«ãšã£ãŠæãå°é£ãªäœæ¥ã·ããªãªã® 100 ã€ã§ãã å°ã㪠put ãªã¯ãšã¹ã (ããšãã° 10 ãã€ã) ã ããäœæãããããã 50 ïœ 50 åã®ããã¯ã«çµåããå ŽåãXNUMX ç§ãããæ°åäžã®æäœãçºçããå¯èœæ§ããããç¶æ³ã¯èªã¿åãå°çšãªã¯ãšã¹ãã®å Žåãšåæ§ã§ãã 泚ç®ã«å€ããã®ã¯ããã®çµæã DataStax ã§åŸãããçµæãããå€§å¹ ã«åªããŠããããšãããã¯äœããã XNUMX ãããã¯åäœã®ãªã¯ãšã¹ãã«ãããã®ã§ãã
ã¹ã¿ã³ã: 16 DataNode ããã³ 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ã¹ã¬ãã)ã HBase ããŒãžã§ã³ 1.2.0-cdh5.14.2ã
10 çµè«
ãã®ã·ã¹ãã ã¯éåžžã«æè»ã«æ§æãããŠããŸãããå€æ°ã®ãã©ã¡ãŒã¿ã®åœ±é¿ã¯ãŸã äžæã§ãã ãããã®äžéšã¯ãã¹ããããŸããããçµæã®ãã¹ã ã»ããã«ã¯å«ãŸããŸããã§ããã ããšãã°ãäºåå®éšã§ã¯ãé£æ¥ã»ã«ããã®å€ã䜿çšããŠæ å ±ããšã³ã³ãŒããã DATA_BLOCK_ENCODING ãªã©ã®ãã©ã¡ãŒã¿ãŒã®éèŠæ§ãäœãããšã瀺ãããŸããããããã¯ã©ã³ãã ã«çæãããããŒã¿ã§ã¯ç解ã§ããŸãã å€æ°ã®éè€ãªããžã§ã¯ãã䜿çšãããšãå€§å¹ ãªå¹æãåŸãããå¯èœæ§ããããŸãã äžè¬ã«ãHBase ã¯ããªãæ¬æ Œçã§ããèããããããŒã¿ããŒã¹ãšããå°è±¡ãäžãã倧ããªããŒã¿ ãããã¯ãæ±ãæäœãå®è¡ããå Žåã«éåžžã«çç£æ§ãé«ããšèšããŸãã ç¹ã«ãèªã¿åãããã»ã¹ãšæžã蟌ã¿ããã»ã¹ãæéå ã«åé¢ã§ããå Žåã¯ãªãããã§ãã
ååã«é瀺ãããŠããªããæèŠãããããŸãããããã詳现ã«ãç¥ããããçšæããããŸãã ããªãã®çµéšãå
±æããããäœãåæã§ããªãããšãããã°è©±ãåã£ãŠãã ããã
åºæïŒ habr.com