ããªãã¯ãç¹ã«ããªãã®ãããã€ã³ã¿ãŒããããªãã§ããããŠææããã®åé¢ã«ã¯ãé¢å³¶ã§ã®æåŸã®10幎ãè²»ãããŠããå Žåã¯ãç§ãã¡ã¯ãMapReduceã®ã®æŠå¿µã«ã€ããŠè©±ãåè©Šè¡ããŸãã å°å ¥ã¯ãMapReduceã®æŠå¿µã€ã³ã¿ãŒã·ã¹ãã ãºã®Cachéç°å¢ã®å®çŸã®ããã«ååãå°ããã§ãããã ããªãã¯ããŸãã«ãé ããæåŸã®10幎éã«é€å»ãããªãå Žåã¯ãæã ã¯åºç€ã€ã³ãã©ãäœæããŠãã第äºéšãã«é²ãã§ãã ããã
-ç§ã¯ããªããåã®èšäºI /翻蚳ããæšæž¬ãããããããªããšããŠãMapReduceã®ã®å€§ãã¡ã³ã§ã¯ãªããã¡ããã©å®çŸ©ããŠã¿ãŸããããHadoopã®å²è·¯ã«ç«ã€ã -ãã€ã±ã«ã»ã¹ããŒã³ãã¬ãŒã«ãŒãšãã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã235åé«éããªãã®Hadoopã¯ã©ã¹ã¿ãè¶ ããããšã¯ã§ããã§ããããã«[ããç§ã¯Hadoopã®MapReduceã®ã®Javaå®è£ ã®ãã¡ã³ã§ã¯ãªãããããã¯å人çã§ã]
ãããã«ãããããããã¹ãŠã®äºçŽã匱ç¹ã«ããããããããã®äž»é¡ãžã®åŸ©åž°ãè¡ããç°ãªãç°å¢ãç°ãªãèšèªã§ã®MapReduceãå®è£ ããããšããå€ãã®çç±ããããŸãã ãã®ãã¹ãŠã¯ãç§ãã¡ã¯ãåŸã«èããããããããŸã§BigDataã«ã€ããŠã®è©±ãèãããªããã°ãªã...
ããŒã¿ã倧ããããšãå°ããããšïŒ
ããã¯BigDataã«å€¢äžã«ãå§ããæ°å¹Žåã圌ã¯å°ãããŒã¿ã倧ãããªããã©ãã®éçããããã誰ãããããè¡ãã«ã¯ãã¡ãã·ã§ããã«ãªãè¥ããšãééã£ããããšãç¥ã£ãŠããã ã£ããšãã誰ããæ¬åœã«ç¥ããŸããã§ããã æãçµã€ã«ã€ããäžéšã®äººã¯BigDataé·ãæµè¡èªïŒããã¯ããªãé¢çœãã§ãããã¬ãŒãããŒãšå®£èšããå®éã«åé€æ±ºå®ãã決å®BigData 2016ã®ããã®åœŒã®ã«ãŒãbazvordovãšã®çšèªã¯ãä»ã®åå²ããããšããäºå®ã«ãã£ãŠããããæ£åœåããŸãïŒã ããããããã¬ãŒãããŒçšèªBigDataãžã®æ¬²æ±ã®ããŸã ç§ãã¡ã®éã§ãéåžžã«çããŠããããŠç§ã¯åœŒã®ç解ã決å®ããããã«ããã®æéãèããŸãã
äŸãã°ãæã ã¯æåŸãŸã§ç¥ã£ãŠããã°ãæã«ãããã°ããŒã¿ãããªã³ã«ããç§ãã¡ã®ãéåžžã«å€§ããªããŒã¿ã§ã¯ãªããïŒ
ïŒçç±ã®ïŒæãç¹ç°ãããããã£ã³ã¿ãŒãäžè¬çã«ããã³x86 chastnosti1ã«ãããã¢ãŒããã¯ãã£ããã»ããµäžã§æãå°æ¬å°é家ã®äžäººã«ãã£ãŠäžããããåçïŒ
FWIWãç§ã¯ã€ã³ãã«ã§åããŠããæã«ãããŒããŠã§ã¢ããŒã ã¯ãã次äžä»£ããã»ããµÂ»ïŒdon'taskïŒã«åãçµãã§åå ããç§ã¯çŽææå匷ãå§ããããã»ããµã¢ãŒããã¯ã㣠Nehalemã®ããªã³ã©ã€ã³ã§ãªãå éšããã¯ä»ãã®ãã€ãããã»ã«ã³ã¿ãŒããããã³MASãæã£ãŠããŸãã ãããã¯ããè¯ããããæ確ã ã£ãã®ã§ã
ã€ãŸã ããªãã®ããŒã¿ã®ããã©ãã€ãã®å€«å©Šã®ã¿ããªããããªãã¯ããããããã¹ãŠã®ããŒã¿ã¯ãïŒãéãšã¢ãããŒã·ã§ã³ã®ã«ååã§ããã°ããã¡ãããéïŒã¯ããµãŒããŒäžã®ã¡ã¢ãªã«åãŸãããšãä¿èšŒããã®ã«ååã§ãããµãŒããã·ã³ã®ããŒããŠã§ã¢æ§æãèŠã€ããããšãã§ããããã«ãªããŸãããããŠãããªãã®ããŒã¿ããŸã ãããŸãéåžžã«å€§èŠæš¡ã§ã¯ãããŸããã
åæ¢äœæ¥åçŽã¹ã±ãŒãªã³ã°ãšã¢ãããŒãïŒæ©æ¢°ã®ãããè¯ããçºèŠïŒãããšãBigDataããããããéå§ããŸã ããŒã¿ã®ç¹å®ã®ãµã€ãºã§ããªãã¯ãä»»æã®ïŒåççãªïŒãéã®ããã«è€æ°ã®æ§æãè³Œå ¥ããããšã¯ã§ããŸããã ãããŠãæã ã¯åºãã«æé·ãå§ããå¿ èŠããããŸãã
åçŽã« - æé«
[OK]ããç§ãã¡ã¯çšèªBigDataã«æé·ããŠããããŒã¿ã®éã決å®ããããã«ãæã ã¯å€§èŠæš¡ãªããŒã¿ã®ããã«ãã®ä»äºã«è¿ã¥ããã決å®ããªããã°ãªããŸããã 倧èŠæš¡ãªå€§èŠæš¡ãªããŒã¿ã«äœ¿çšããå§ããæåã®ã¢ãããŒãã®äžã€ã ã£ãMapReduce ã å€ãã®ä»£æ¿ãœãããŠã§ã¢ã¢ãã«ã¯ãããè¯ããŸãã¯ããæè»ãªMapReduceã®ãããããããªãããããããæãå¹ççã§ã¯ãªããã圌ã¯ééããªããæãåçŽåããããšãã§ãããã°ããŒã¿ãã§ã®äœæ¥ãããããŸãã
ãŸããã§ããã ãæ©ãæã ã¯ãµããŒãBigDataã®ããã®ãœãããŠã§ã¢ãã©ãããã©ãŒã ãããŒã¿ããŒã¹ãã©ãããã©ãŒã ã®ããã€ãã®çš®é¡ãæ€èšãå§ããšããŠãæã ã¯ãMapReduceã®ã·ããªãªã¯ãå éšãŸãã¯å€éšã®ããŒã«ã§ããã®ãã©ãããã©ãŒã ã§ãµããŒããããŠããããšãããã©ã«ãã§æ³å®ããŠããŸãã
èšãæããã°-ããªãã¯ããªãã®ãã©ãããã©ãŒã ãBigDataããµããŒãããŠããããšããäœã®MapReduceãèšãããšã¯ã§ããŸããïŒ
ALARM㯠- ããªããæã«10幎ããªãã£ããªãã°ãããªãã¯å®å šã®MapReduceã¢ã«ãŽãªãºã ã®åºæ¬ã«ã€ããŠè©±ãæŸæ£ãããããšãã§ãããã£ã³ã¹ã¯ããªããæ¢ã«ç¥ã£ãŠãããããŠããŸãã äŒæ¯ã®ããã«ãæã ã¯ããããã¹ãŠå§ãŸã£ãå Žæããããã玹ä»ããããã«ïŒåã³ïŒããããšãããšãã©ã®ããã«ããã¯ãã¹ãŠ2016幎ã®çµããã«äœ¿çšããããšãã§ããŸãã ïŒç¹ã«ãMapReduceã®ã¯ãã«ãŒãã³ãããµããŒããããŠããªããã©ãããã©ãŒã äžã§ãïŒ
å€ãã®å Žåãåé¡ã®æãç°¡åãªæ¹æ³ã¯ãç§ãã¡ã¯æé«ã®çµæãååŸãããŸã é·ãæéã®ããã«ã補åã«äœãããšãå¯èœã«ããããšã«æ³šç®ãããŠããŸãã ããããããèšç»ã®åäœè ã®ã å Žåã§ãã£ãŠãããã®çµæãšããŠããããæãå¹ççã§ã¯ãããŸããããåå ã³ãã¥ããã£ãæã£ãŠãããšããäºå®ã®ããã«ãããã¯åºãç¥ãããŠãããå šãŠãåŠãã ããšåœŒã¯ã¡ããã©è¯ãååãšè§£ãåé¡ã§ããã ãã®ãããªå¹æã¯ãMapReduceã®ã¢ãã«ã§èŠ³å¯ãã«ã€ããŠ-ããåŸãåºæ¬çã«ã¯éåžžã«åçŽã§ãããããã¯ãŸã åºã䜿ãããŠããåäœè ã®äž¡æ¹ã圌ã®æ»ã宣èšããŸãã ã
ãã£ãã·ã¥ã«ãºãŒã
æŽå²çã«ã€ã³ã¿ãŒã·ã¹ãã ãºã®Cachéã¯ãäž¡æ¹ã®åçŽããã³æ°Žå¹³æ¹åã®ã¹ã±ãŒãªã³ã°ã®ããã®å µåšåº«ã«ååãªããŒã«ãæã£ãŠããŸããã æã ã¯ãã¹ãŠã® ïŒæ²ããçµµæåãïŒç¥ã£ãŠããããã«Cachéã¯ãããŒã¿ããŒã¹ã»ãµãŒãããæ°Žå¹³æ¹åã®ã¹ã±ãŒã©ããªãã£ãšé«å¯çšæ§ã®ããã«ECPïŒãšã³ã¿ãŒãã©ã€ãºã»ãã£ãã·ã¥ã»ãããã³ã«ïŒã䜿çšããããšãã§ããã¢ããªã±ãŒã·ã§ã³ã»ãµãŒããŒãã ãã§ã¯ãããŸããã
ç¹åŸŽECPãããã³ã«ã¯ã - éåžžã«åŒ·ããäžå€®ããŒãã»ããŒã¿ããŒã¹ã»ãµãŒãã§ã®æžã蟌ã¿ããŒã¢ã³æ§èœã«åœæ¥ããã¯ã©ã¹ã¿ã®ç°ãªãããŒãã§åãããŒã¿ã«ã¢ã¯ã»ã¹ããããã®ã³ããŒã¬ã³ã·ã»ãããã³ã«ãæé©åãããŸãã ECPã¯ãæžã蟌ã¿ããŒã¢ã³ãžã®è² è·ãéåžžã«é«ããªãå Žåã¯ãã«ãŠã³ãããã»ããµã³ã¢ã«ããŒããè¿œå ããããšãã§ããŸãããé¢äžããããŒãã®åã¬ã³ãŒãã«ãããã¢ã¯ãã£ãã«çæããå Žåããã®ãããã³ã«ã¯ãæ°Žå¹³ã«ã¹ã±ãŒã«ããã¢ããªã±ãŒã·ã§ã³ãå©ãã«ã¯ãªããŸããã ãµãŒããŒã®ããŒã¿ããŒã¹äžã®ãã£ã¹ã¯ãµãã·ã¹ãã ãããã«ããã¯ã§ããç¶ããã ããã
ããã°ããŒã¿ãæ±ããšãã«å®éã«ã¯ãææ°ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãå¥ã®äœ¿çšãå¿ èŠãšããããããã¯ã¢ãããŒãã®äžã«èãããçŽäº€ããŸãã æ°Žå¹³ã¢ããªã±ãŒã·ã§ã³ã¯ãã¯ã©ã¹ã¿ã®åããŒãäžã®ãã£ã¹ã¯ãµãã·ã¹ãã ã䜿çšããªããã°ãªããªãã¹ã±ãŒã«ã ããŒã¿ããªã¢ãŒãããŒãã«æäŸãããŠããECPãšã¯ç°ãªããæã ã¯éã«ãã³ãŒããµã€ãºãå°ããããšãæ³å®ãããããããããµã€ãºãïŒããŒã¿ãµã€ãºã«é¢ããå°ãªããšãïŒéåžžã«å€§ããªãã®ãšããåããŒãã«ãããããŒã¿ã å°æ¥çã«ã¯ãã·ã£ãŒãã£ã³ã°ãšåŒã°ããããŒãã£ã·ã§ãã³ã°ã®åæ§ã®ã¿ã€ãã¯ã å°æ¥ã®è£œåã®äžã€ã§SQLãšã³ãžã³ãã£ãã·ã¥å ã«å®è£ ãããŸãã ãããä»æ¥ã§ãã ãã©ãããã©ãŒã ãžã®å©çšå¯èœãªæ段ã§ãç§ãã¡ã¯ç§ãã¡ãçŸä»£ã®ãããã¬ã³ãã£ãè¥ãããå©çšããŠæ°Žå¹³ã«ã¹ã±ãŒã©ãã«ãªã·ã¹ãã ãèšèšããããšãã§ããããã«ãªãäœããã·ã³ãã«ã«å®è£ ããããšãã§ãè¿ã¥ããŸãã äŸãã°ãMapReduceã®ãå©çšããŠ...
Googleã®MapReduceã®
MapReduceã®å ã®å®è£ ãã§æžãããŠããGoogleã®C ++ ãããã¯åºç¯ãªãã©ãã€ã ã¯ãJavaã ãã§ããApacheã®ãäžã®MapReduceã®å®è£ ãšæ¥çã§å§ãŸã£ãŠããããšãå€æããŸããã ãããã®å Žåããããããããå®è£ èšèªã®ãã¢ã€ãã¢ã¯ããããç§ãã¡ã®å Žåã®ããã«ãC ++ãJavaã®ã移åããŸãã¯ã®CachéObjectScriptã®äžã«å®è£ ãããŠãããã©ãããåããŸãŸã
[ã®CachéObjectScriptã®å®è£ ã®ããã«ãæã ã¯ãšããŠç¥ãããŠããå€æ¬¡å é åãæ±ãå Žåã«ã®ã¿äœ¿çšå¯èœã§ãããªãã¯ã®ã«ããã«ã®äœ¿çšããã°ããŒãã«ã ã ãã ]æã ã¯å¯èœæ§ããããã
å³1. Ispolnenievsredeã®MapReduce izstati "ïŒå€§ã®ç°¡æããŒã¿åŠçMapReduceã®ã¯ã©ã¹ã¿"ãOSDI- 2004
çµµäžèšã«æãããã¢ã«ãŽãªãºã ã®MapReduceã®æé ãèŠãŠãããŸãããïŒ
å ¥ãå£ã§ãç§ãã¡ã¯ãããã¡ã€ã«ãããŸãã¯æã ã¯ããŒã¿ã®ããã€ãã®ç¬ç«ã®éšåã«ïŒpartitsionirovatïŒç Žãããšãã§ããããšããããŒã¿ã®æœåšçã«ç¡éã¹ããªãŒã ã®ã»ãããæã£ãŠããŸãã
æã ã¯ãŸããæã ã¯ãå ¥åããŒã¿çã®ãã³ãã©ãšããŠå²ãåœãŠãããšãã§ãã䞊åææã®ã»ããæã£ãŠããïŒããŒã«ã«ã»ããŒãã®å éšãããŸãã¯ä»ã®ã¯ã©ã¹ã¿ããŒãäžã§åé€ããããšãã§ããŸãïŒïŒã¹ãããã衚瀺»/«ããã»ïŒ
ãããã®äžŠåããã»ããµã¯ãå ¥åããŒã¿ã¹ããªãŒã ãèªã¿åããåºåã¹ããªãŒã ïŒSïŒãããŒå€ãã®ãã¢ãåºåããŸãã åºåã¹ããªãŒã ã¯ãåºåãã¡ã€ã«ã«æžã蟌ãŸããããã©ããä»ã®ããšãã§ããŸãïŒããšãã°ãã¯ã©ã¹ã¿ãã¡ã€ã«ã·ã¹ãã Googleã®GFSã¯ãApache HDFSããŸãã¯ã¯ã©ã¹ã¿å ã®è€æ°ã®ããŒãéã§ãä»ã®ãéæ³ã®å Žæãã®è€è£œããŒã¿ã§ïŒã
- åŒã°ãã次ã®ã¹ããŒãžã§ã¯ããå瞮»/«æã ã¯ïŒé©ãïŒ...ç³ã¿èŸŒã¿ã«åŸäºããŠãããã³ãã©ã®ç°ãªãã»ãããæã£ãŠãã»æžãããŸã ã 圌ãã¯äžããããããŒããã¹ãŠã®ããŒã¿ã®åéãããã³åºåã®æ¬¡ã®ãããŒãšå€ããšããŠãçµæããŒã¿ã®ããã«ããèªã¿ãã ããã ãã®ã¹ãããã®æµåºç©ã¯ãåã®ã¹ãããã®ããã«ãéæ³ã®ã¯ã©ã¹ã¿åããããã¡ã€ã«ã»ã·ã¹ãã ãŸãã¯ãã®é¡äŒŒäœã§æžãããŠããŸãã
èªç¶ã®äžã§ã®ããã - 泚MapReduceã®ã¢ãããŒããšããã ããªãããã€ãã©ã€ã³ã«ããã«é²ãåã«ã圌ã¯ããã±ããã®å®çŸã®èŠ³ç¹ãããå ¥åããŒã¿ã®ç¡éã®ã¹ããªãŒã ãåŠçãããã®ã¹ããŒãžã®ããããã®äœåïŒã衚瀺ããŸãã¯ãçž®å°ãïŒã®å®äºãåŸ æ©ããŸããã ããã¯ãäŸãã°ã䜿çšãããããã¢ãã³ãªã©ã€ã³ã®ã¢ã«ãŽãªãºã ãšã¯å¯Ÿç §çã§ããã圌ãã®ãã¶ã€ã³ã§ãç¡éãã®å ¥åã¹ããªãŒã ãåŠçããããšãç®çãšããŠããApacheã®ã«ãã«ãã
ç¥èè±å¯ãªäººã¯ãç§ã¯ãŸã æ··ä¹±ããŠãèããŠããã®ã»ã¯ã·ã§ã³ãã¹ãããããç¡ç¥ã äŒçµ±çã«ç°ãªãããã°ã©ãã³ã°èšèªã§ãããç°ãªãç°å¢ã§ã®MapReduceã®å®è£ ã®èª¬æã§äœ¿çšãããŠããã¯ãŒãæ°ïŒããŒã¿ã»ã¹ããªãŒã å ã®åèªæ°ïŒãå€å žçãªäŸã§èŠãŠã¿ãŸãããã
ã ãããèãããŠã®ã¯ãæã ãå ¥åã³ã¬ã¯ã·ã§ã³ïŒããªã倧ããïŒãã¡ã€ã«å ã®åèªã®æ°ãã«ãŠã³ãããªããã°ãªããªãããšèšããŸãã æ確ã«ããããã«ããã®åèªã®å®çŸ©ãæã ã¯ã空çœæåãããªãã¡éã®æååãæ³å®ããŸã æ°åãå¥èªç¹ã¯ããŸããããã¯ããã¡ãããéåžžã«è¯ãã§ã¯ãããŸããããåèªã®äžéšãšèããããããåçŽãªäŸã®æ çµã¿ã®äžã§ãããã¯ç§ãã¡ãæ°ã«ããŸããã
ç§ã¯C ++ã®äŸãèŠããšã圌ã®éã®å¥¥ã«ããC ++éçºè ãšããŠãç§ã®ããã®ã¢ã«ãŽãªãºã ã¯ãæ確ã«ãªããŸãã ãããããªã - ã§ã¯ãªããããã«æã ãç°¡ç¥åãããæ¹æ³ã§ããã衚瀺ãããŸããå¿é ããªãã§ãã ããã
#include "mapreduce/mapreduce.h" // User's map function class WordCounter : public Mapper { public: virtual void Map(const MapInput& input) { const string& text = input.value(); const int n = text.size(); for (int i = 0; i < n; ) { // Skip past leading whitespace while ((i < n) && isspace(text[i])) i++; // Find word end int start = i; while ((i < n) && !isspace(text[i])) i++; if (start < i) Emit(text.substr(start,i-start),"1"); } } }; REGISTER_MAPPER(WordCounter); // User's reduce function class Adder : public Reducer { virtual void Reduce(ReduceInput* input) { // Iterate over all entries with the // same key and add the values int64 value = 0; while (!input->done()) { value += StringToInt(input->value()); input->NextValue(); } // Emit sum for input->key() Emit(IntToString(value)); } }; REGISTER_REDUCER(Adder); int main(int argc, char** argv) { ParseCommandLineFlags(argc, argv); MapReduceSpecification spec; // Store list of input files into "spec" for (int i = 1; i < argc; i++) { MapReduceInput* input = spec.add_input(); input->set_format("text"); input->set_filepattern(argv[i]); input->set_mapper_class("WordCounter"); } // Specify the output files: // /gfs/test/freq-00000-of-00100 // /gfs/test/freq-00001-of-00100 // ... MapReduceOutput* out = spec.output(); out->set_filebase("/gfs/test/freq"); out->set_num_tasks(100); out->set_format("text"); out->set_reducer_class("Adder"); // Optional: do partial sums within map // tasks to save network bandwidth out->set_combiner_class("Adder"); // Tuning parameters: use at most 2000 // machines and 100 MB of memory per task spec.set_machines(2000); spec.set_map_megabytes(100); spec.set_reduce_megabytes(100); // Now run it MapReduceResult result; if (!MapReduce(spec, &result)) abort(); // Done: 'result' structure contains info // about counters, time taken, number of // machines used, etc. return 0; }
äžèšã®ããã°ã©ã ã¯ãæšæºã®argc / argvãä»ããŠæž¡ããããåŠçããããã¡ã€ã«ã®ãªã¹ãã§åŒã³åºãããŸãã
MapReduceInputãªããžã§ã¯ãã¯ãå ¥åãªã¹ãããåãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããã®ã©ãããŒãšããŠã€ã³ã¹ã¿ã³ã¹åããããã®ããŒã¿ãåŠçããããã«WordCountã¯ã©ã¹ã«ãã£ãŠå®è¡ãããããã«ã¹ã±ãžã¥ãŒã«ãããŸãã
MapReduceOutputã¯ãåºåãGoogleGFSã¯ã©ã¹ã¿ãŒåãã¡ã€ã«ã·ã¹ãã ã«ãªãã€ã¬ã¯ãããããšã«ããã€ã³ã¹ã¿ã³ã¹åãããŸãïŒæ³š/ gfs / test / *ïŒ
ReducerïŒã³ã³ããªã¥ãŒã·ã§ã³ãhmmïŒããã³CombinerïŒã³ã³ãããŒã¿ãŒïŒã¯ã©ã¹ã¯ãC ++ Adderã¯ã©ã¹ã«ãã£ãŠå®è£ ããããã®ããã¹ãã¯åãããã°ã©ã ã§æäŸãããŸãã
WordCounerã¯ã©ã¹ã®å Žåã«å®è£ ãããŠããMapperã¯ã©ã¹ã®Mapé¢æ°ã¯ãäžè¬åãããMapInputã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠããŒã¿ãåãåããŸãã ç§ãã¡ã®å Žåããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¡ã€ã«ããããŒã¿ãé ä¿¡ããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã¯ã©ã¹ã¯ã次ã®è¡ãæååãšããŠæäŸããvalueïŒïŒã¡ãœãããšãsizeïŒïŒã¡ãœããã®å ¥åããŒã¿ã®é·ããå®è£ ããå¿ èŠããããŸãã
ãã¡ã€ã«å ã®åèªã®æ°ãã«ãŠã³ãããã¿ã¹ã¯ã®è§£æ±ºçã®äžéšãšããŠã空çœãç¡èŠããã¹ããŒã¹éã®ä»ã®ãã¹ãŠãåå¥ã®åèªãšèŠãªããŸãïŒå¥èªç¹ã«é¢ä¿ãªãïŒã åºåãã¹ããªãŒã ãã§èŠã€ãã£ãåèªã¯ãEmitïŒåèªãã1ãïŒé¢æ°ã®åŒã³åºããéããŠèšè¿°ããŸãã
Reducerã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã¯ã©ã¹ïŒãã®å Žåã¯AdderïŒã®Reduceé¢æ°ã¯ãå¥ã®äžè¬çãªReduceInputã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠå ¥åããŒã¿ãåãåããŸãã ãã®é¢æ°ã¯ãMapã®åã®æ®µéã§èšé²ãããããŒãšå€ã®ãã¢ããç¹å®ã®ããŒïŒãã®å Žåã¯ãã¡ã€ã«ã®åèªïŒã«å¯ŸããŠåŒã³åºãããŸãã ãã®é¢æ°ã¯ãç¹å®ã®ããŒãã¢ããã€ã¹ããå€ã®ã³ã¬ã¯ã·ã§ã³ãåŠçããããã«åŒã³åºãããŸãïŒãã®å Žåãã·ãŒã±ã³ã¹ã1ãïŒã å²ãåœãŠã®äžéšãšããŠãReduceré¢æ°ã®åœ¹å²ã¯ãå ¥åã§ã®ãã®ãããªãŠãããã®æ°ãšãåºåãã£ãã«ãžã®åèšæ°ã®åºåãèšç®ããããšã§ãã
- è€æ°ã®ããŒãã®ã¯ã©ã¹ã¿ãŒãæ§ç¯ããå ŽåããŸãã¯MapReduceã¢ã«ãŽãªãºã ã®ãã¬ãŒã ã¯ãŒã¯å ã§å€ãã®ãã³ãã©ãŒãéå§ããå Žåãããã¹ã¿ãŒãã®è²¬ä»»ã¯ãçºè¡ãããããŒãšå€ã®ãã¢ã®ã¹ããªãŒã ã察å¿ããã³ã¬ã¯ã·ã§ã³ã«åå²ãããããã®ã³ã¬ã¯ã·ã§ã³ããã³ãã©ãŒãžã®å ¥åããªãã€ã¬ã¯ãããããšã§ãã
ãã®ãããªãã¹ã¿ãŒããŒãã®å®è£ ã®è©³çŽ°ã¯ã䜿çšãããã¯ã©ã¹ã¿ãªã³ã°ãã¯ãããžãŒã®å®è£ ãããã³ã«ã«åŒ·ãäŸåããŸãã çŸåšã®ç©èªã®æ¬åŒ§ã®å€ã«ãããã®è©³çŽ°ãªèª¬æã¯çç¥ããŸãã ä»åã®å ŽåãCachéObjectScriptã®å Žåãèæ ®ãããŠããã¢ã«ãŽãªãºã ã®äžéšïŒçŸåšã®WordCountãªã©ïŒã«ã€ããŠã¯ãã°ããŒãã«ãšãã®æ§è³ªã®äœ¿çšã«ããããœãŒããããã¹ããŒã¹é åãšããŠããŠã£ã¶ãŒããç°¡åã«å®è£ ã§ããŸãã 詳现ã¯åŸã§ã
- äžè¬çãªã±ãŒã¹ã§ã¯ãããšãã°ãå€ã®å®å šãªã³ã¬ã¯ã·ã§ã³ãäžåºŠã«åŠçããããšãäžå¯èœãªå Žåãªã©ãããã€ãã®Reduceã¹ããããéå§ããå¿ èŠããã°ãã°ãããŸãã 次ã«ãè¿œå ã®Combinerã¹ããŒãžã衚瀺ãããåã®Reduceã¹ããŒãžããã®ããŒã¿ã®çµæãããã«éçŽãããŸãã
C ++å®è£ ã®ãã®ãããªè©³çŽ°ãªèª¬æãèªãã§ããMapReduceãäœã§ããããŸã ç解ã§ããªãå Žåã¯ãããç¥ãããŠãã1ã€ã®ã¹ã¯ãªããèšèªã®ããã€ãã®è¡ã§ãã®ã¢ã«ãŽãªãºã ã説æããŠã¿ãŸãããã
map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result));
ãã®åçŽåãããäŸã§ãããããã«ãmapé¢æ°ã®åœ¹å²ã¯ãäžé£ã®<keyãvalue>ãã¢ãçºè¡ããããšã§ãã ãããã®ãã¢ã¯ãŠã£ã¶ãŒãã§æ··åããã³ãœãŒããããæå®ãããããŒã®çµæã®å€ã®ã³ã¬ã¯ã·ã§ã³ã¯ãreduceïŒç³ã¿èŸŒã¿ïŒé¢æ°ã®å ¥åã«éä¿¡ãããåºåé¢æ°<keyãvalue>ãçæããŸãã ãã®å Žåã<wordãcounter>ã«ãªããŸã
å€å žçãªMapReduceå®è£ ã§ã¯ã<keyãvalue>ãã¢ã®ã³ã¬ã¯ã·ã§ã³ãåå¥ã®ã³ã¬ã¯ã·ã§ã³<keyãvaluesïŒsïŒ>ã«å€æããã®ããæéãšãªãœãŒã¹ãæãæ¶è²»ããæäœã§ãã Cachéå®è£ ã®å Žåãbtree *ãªããžããªãšECPãã€ã³ãã£ã³ã°ãããã³ã«ã®å®è£ ã®æ§è³ªã«ããããŠã£ã¶ãŒãã§ã®ãœãŒããšéçŽã¯ããã»ã©å€§ããªã¿ã¹ã¯ã§ã¯ãªããã»ãšãã©ãç¡æãã§ãã·ã³ã«å®è£ ãããŸãã ããã«ã€ããŠã¯ã次ã®èšäºã§èª¬æããŸãã
ããããããã¯å ¥ééšåãšããŠã¯ååã§ã-ã©ã®èšèªã§ãMapReduceã®å®è£ ãéå§ããã®ã«ååãªæ å ±ãæäŸããŸããããCachéObjectScriptå®è£ èªäœã«ã¯ãŸã 觊ããŠããŸããã 次ã®èšäºã§MapReduceã®å®è£ ã«æ»ããŸãã è¡ã«æ»åšïŒ