±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËͼ¸ÅÄîÊõÓͼ´¦Àí¼¼Êõ¡¢Í¼´æ´¢Ä£Ê½¡¢Í¼¼ÆËãģʽµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢Í¼¸ÅÄîÊõÓï 1.1 »ù±¾¸ÅÄî ͼÊÇÓɶ¥µã¼¯ºÏ(vertex)¼°¶¥µã¼äµÄ¹ØÏµ¼¯ºÏ£¨±ßedge£©×é³ÉµÄÒ»ÖÖÊý¾Ý½á¹¹¡£
ÕâÀïµÄͼ²¢·ÇÖ¸´úÊýÖеÄͼ¡£Í¼¿ÉÒÔ¶ÔÊÂÎïÒÔ¼°ÊÂÎïÖ®¼äµÄ¹ØÏµ½¨Ä££¬Í¼¿ÉÒÔÓÃÀ´±íʾ×ÔÈ»·¢ÉúµÄÁ¬½ÓÊý¾Ý£¬È磺Éç½»ÍøÂç¡¢»¥ÁªÍøwebÒ³Ãæ
³£ÓõÄÓ¦ÓÃÓУºÔÚµØÍ¼Ó¦ÓÃÖÐÕÒµ½×î¶Ì·¾¶¡¢»ùÓÚÓëËûÈ˵ÄÏàËÆ¶Èͼ£¬ÍƼö²úÆ·¡¢·þÎñ¡¢È˼ʹØÏµ»òýÌå
1.2 ÊõÓï 1.2.1¶¥µãºÍ±ß Ò»°ã¹ØÏµÍ¼ÖУ¬ÊÂÎïΪ¶¥µã£¬¹ØÏµÎª±ß

1.2.2ÓÐÏòͼºÍÎÞÏòͼ ÔÚÓÐÏòͼÖУ¬Ò»Ìõ±ßµÄÁ½¸ö¶¥µãÒ»°ã°çÑÝÕß²»Í¬µÄ½ÇÉ«£¬±ÈÈ縸×Ó¹ØÏµ¡¢Ò³ÃæAÁ¬½ÓÏòÒ³ÃæB£»
ÔÚÒ»¸öÎÞÏòͼÖУ¬±ßûÓз½Ïò£¬¼´¹ØÏµ¶¼ÊǶԵȵ쬱ÈÈçqqÖеĺÃÓÑ¡£
GraphXÖÐÓÐÒ»¸öÖØÒª¸ÅÄËùÓеı߶¼ÓÐÒ»¸ö·½Ïò£¬ÄÇôͼ¾ÍÊÇÓÐÏòͼ£¬Èç¹ûºöÂԱߵķ½Ïò£¬¾ÍÊÇÎÞÏòͼ¡£
1.2.3Óл·Í¼ºÍÎÞ»·Í¼ Óл·Í¼Êǰüº¬Ñ»·µÄ£¬Ò»ÏµÁж¥µãÁ¬½Ó³ÉÒ»¸ö»·¡£ÎÞ»·Í¼Ã»Óл·¡£ÔÚÓл·Í¼ÖУ¬Èç¹û²»¹ØÐÄÖÕÖ¹Ìõ¼þ£¬Ëã·¨¿ÉÄÜÓÀÔ¶ÔÚ»·ÉÏÖ´ÐУ¬ÎÞ·¨Í˳ö¡£

1.2.4¶È¡¢³ö±ß¡¢Èë±ß¡¢³ö¶È¡¢Èë¶È ¶È±íʾһ¸ö¶¥µãµÄËùÓбߵÄÊýÁ¿
³ö±ßÊÇÖ¸´Óµ±Ç°¶¥µãÖ¸ÏòÆäËû¶¥µãµÄ±ß
Èë±ß±íʾÆäËû¶¥µãÖ¸Ïòµ±Ç°¶¥µãµÄ±ß
³ö¶ÈÊÇÒ»¸ö¶¥µã³ö±ßµÄÊýÁ¿
Èë¶ÈÊÇÒ»¸ö¶¥µãÈë±ßµÄÊýÁ¿
1.2.5³¬²½ ͼ½øÐеü´ú¼ÆËãʱ£¬Ã¿Ò»Âֵĵü´ú½Ð×öÒ»¸ö³¬²½
¶þ¡¢Í¼´¦Àí¼¼Êõ ͼ´¦Àí¼¼Êõ°üÀ¨Í¼Êý¾Ý¿â¡¢Í¼Êý¾Ý²éѯ¡¢Í¼Êý¾Ý·ÖÎöºÍͼÊý¾Ý¿ÉÊÓ»¯¡£
2.1¡¡Í¼Êý¾Ý¿â Neo4j¡¢Titan¡¢OrientDB¡¢DEXºÍInfiniteGraphµÈ»ùÓÚ±éÀúËã·¨µÄ¡¢ÊµÊ±µÄͼÊý¾Ý¿â£»
2.2¡¡Í¼Êý¾Ý²éѯ ¶ÔͼÊý¾Ý¿âÖеÄÄÚÈݽøÐвéѯ
2.3¡¡Í¼Êý¾Ý·ÖÎö Google Pregel¡¢Spark GraphX¡¢GraphLabµÈͼ¼ÆËãÈí¼þ¡£´«Í³µÄÊý¾Ý·ÖÎö·½·¨²àÖØÓÚÊÂÎï±¾Éí£¬¼´ÊµÌ壬ÀýÈçÒøÐн»Òס¢×ʲú×¢²áµÈµÈ¡£¶øÍ¼Êý¾Ý²»½ö¹Ø×¢ÊÂÎ»¹¹Ø×¢ÊÂÎïÖ®¼äµÄÁªÏµ¡£ÀýÈ磬Èç¹ûÔÚͨ»°¼Ç¼Öз¢ÏÖÕÅÈýÔø´òµç»°¸øÀîËÄ£¬¾Í¿ÉÒÔ½«ÕÅÈýºÍÀîËĹØÁªÆðÀ´£¬ÕâÖÖ¹ØÁª¹ØÏµÌṩÁËÓëÁ½ÕßÏà¹ØµÄÓмÛÖµµÄÐÅÏ¢£¬ÕâÑùµÄÐÅÏ¢ÊDz»¿ÉÄܽö´ÓÁ½Õßµ¥´¿µÄ¸öÌåÊý¾ÝÖлñÈ¡µÄ¡£
2.4¡¡Í¼Êý¾Ý¿ÉÊÓ»¯ OLTP·ç¸ñµÄͼÊý¾Ý¿â»òÕßOLAP·ç¸ñµÄͼÊý¾Ý·ÖÎöϵͳ£¨»ò³ÆÎªÍ¼¼ÆËãÈí¼þ£©£¬¶¼¿ÉÒÔÓ¦ÓÃͼÊý¾Ý¿â¿ÉÊÓ»¯¼¼Êõ¡£ÐèҪעÒâµÄÊÇ£¬Í¼¿ÉÊÓ»¯Óë¹ØÏµÊý¾Ý¿ÉÊÓ»¯Ö®¼äÓкܴóµÄ²îÒ죬¹ØÏµÊý¾Ý¿ÉÊÓ»¯µÄÄ¿±êÊǶÔÊý¾ÝÈ¡µÃÖ±¹ÛµÄÁ˽⣬¶øÍ¼Êý¾Ý¿ÉÊÓ»¯µÄÄ¿±êÔÚÓÚ¶ÔÊý¾Ý»òËã·¨½øÐе÷ÊÔ¡£
Èý¡¢Í¼´æ´¢Ä£Ê½ ÔÚÁ˽âGraphX֮ǰ£¬ÐèÒªÏÈÁË½â¹ØÓÚͨÓõķֲ¼Ê½Í¼¼ÆËã¿ò¼ÜµÄÁ½¸ö³£¼ûÎÊÌ⣺ͼ´æ´¢Ä£Ê½ºÍͼ¼ÆËãģʽ¡£
¾ÞÐÍͼµÄ´æ´¢×ÜÌåÉÏÓб߷ָîºÍµã·Ö¸îÁ½ÖÖ´æ´¢·½Ê½¡£2013Ä꣬GraphLab2.0½«Æä´æ´¢·½Ê½Óɱ߷ָî±äΪµã·Ö¸î£¬ÔÚÐÔÄÜÉÏÈ¡µÃÖØ´óÌáÉý£¬Ä¿Ç°»ù±¾Éϱ»Òµ½ç¹ã·º½ÓÊܲ¢Ê¹Óá£
3.1¡¡±ß·Ö¸î£¨Edge-Cut£© ÿ¸ö¶¥µã¶¼´æ´¢Ò»´Î£¬µ«Óеı߻ᱻ´ò¶Ï·Öµ½Á½Ì¨»úÆ÷ÉÏ¡£ÕâÑù×öµÄºÃ´¦ÊǽÚÊ¡´æ´¢¿Õ¼ä£»»µ´¦ÊǶÔͼ½øÐлùÓڱߵļÆËãʱ£¬¶ÔÓÚÒ»ÌõÁ½¸ö¶¥µã±»·Öµ½²»Í¬»úÆ÷ÉϵıßÀ´Ëµ£¬Òª¿ç»úÆ÷ͨÐÅ´«ÊäÊý¾Ý£¬ÄÚÍøÍ¨ÐÅÁ÷Á¿´ó¡£
3.2¡¡µã·Ö¸î£¨Vertex-Cut£© ÿÌõ±ßÖ»´æ´¢Ò»´Î£¬¶¼Ö»»á³öÏÖÔÚһ̨»úÆ÷ÉÏ¡£ÁÚ¾Ó¶àµÄµã»á±»¸´ÖƵ½¶ą̀»úÆ÷ÉÏ£¬Ôö¼ÓÁË´æ´¢¿ªÏú£¬Í¬Ê±»áÒý·¢Êý¾Ýͬ²½ÎÊÌâ¡£ºÃ´¦ÊÇ¿ÉÒÔ´ó·ù¼õÉÙÄÚÍøÍ¨ÐÅÁ¿¡£
3.3¡¡¶Ô±È ËäÈ»Á½ÖÖ·½·¨»¥ÓÐÀû±×£¬µ«ÏÖÔÚÊǵã·Ö¸îÕ¼ÉϷ磬¸÷ÖÖ·Ö²¼Ê½Í¼¼ÆËã¿ò¼Ü¶¼½«×Ô¼ºµ×²ãµÄ´æ´¢ÐÎʽ±ä³ÉÁ˵ã·Ö¸î¡£Ö÷ÒªÔÒòÓÐÒÔÏÂÁ½¸ö¡£
´ÅÅ̼۸ñϽµ£¬´æ´¢¿Õ¼ä²»ÔÙÊÇÎÊÌ⣬¶øÄÚÍøµÄͨÐÅ×ÊԴûÓÐÍ»ÆÆÐÔ½øÕ¹£¬¼¯Èº¼ÆËãʱÄÚÍø´ø¿íÊDZ¦¹óµÄ£¬Ê±¼ä±È´ÅÅ̸üÕä¹ó¡£Õâµã¾ÍÀàËÆÓÚ³£¼ûµÄ¿Õ¼ä»»Ê±¼äµÄ²ßÂÔ¡£
ÔÚµ±Ç°µÄÓ¦Óó¡¾°ÖУ¬¾ø´ó¶àÊýÍøÂç¶¼ÊÇ¡°Î޳߶ÈÍøÂ硱£¬×ñÑÃÝÂÉ·Ö²¼£¬²»Í¬µãµÄÁÚ¾ÓÊýÁ¿Ïà²î·Ç³£ÐüÊâ¡£¶ø±ß·Ö¸î»áʹÄÇЩ¶àÁھӵĵãËùÏàÁ¬µÄ±ß´ó¶àÊý±»·Öµ½²»Í¬µÄ»úÆ÷ÉÏ£¬ÕâÑùµÄÊý¾Ý·Ö²¼»áʹµÃÄÚÍø´ø¿í¸ü¼Ó×½½ó¼ûÖ⣬ÓÚÊÇ±ß·Ö¸î´æ´¢·½Ê½±»½¥½¥ÅׯúÁË¡£
ËÄ¡¢Í¼¼ÆËãģʽ ĿǰµÄͼ¼ÆËã¿ò¼Ü»ù±¾É϶¼×ñÑBSP£¨Bulk Synchronous Parallell£©¼ÆËãģʽ¡£Bulk
Synchronous Parallell£¬¼´ÕûÌåͬ²½²¢ÐУ¬Ëü½«¼ÆËã·Ö³ÉһϵÁеij¬²½£¨superstep£©µÄµü´ú£¨iteration£©¡£´Ó×ÝÏòÉÏ¿´£¬ËüÊÇÒ»¸ö´®ÐÐÄ£ÐÍ£¬¶ø´ÓºáÏòÉÏ¿´£¬ËüÊÇÒ»¸ö²¢ÐеÄÄ£ÐÍ£¬Ã¿Á½¸ösuperstepÖ®¼äÉèÖÃÒ»¸öÕ¤À¸£¨barrier£©£¬¼´ÕûÌåͬ²½µã£¬È·¶¨ËùÓв¢ÐеļÆËã¶¼Íê³ÉºóÔÙÆô¶¯ÏÂÒ»ÂÖsuperstep¡£
4.1¡¡³¬²½ ÿһ¸ö³¬²½£¨superstep£©°üº¬Èý²¿·ÖÄÚÈÝ£º
1.¼ÆËãcompute£¬Ã¿Ò»¸öprocessorÀûÓÃÉÏÒ»¸ösuperstep´«¹ýÀ´µÄÏûÏ¢ºÍ±¾µØµÄÊý¾Ý½øÐб¾µØ¼ÆË㣻
2.ÏûÏ¢´«µÝ£¬Ã¿Ò»¸öprocessor¼ÆËãÍê±Ïºó£¬½«ÏûÏ¢´«µÝ¸öÓëÖ®¹ØÁªµÄÆäËüprocessors£»
3.ÕûÌåͬ²½µã£¬ÓÃÓÚÕûÌåͬ²½£¬È·¶¨ËùÓеļÆËãºÍÏûÏ¢´«µÝ¶¼½øÐÐÍê±Ïºó£¬½øÈëÏÂÒ»¸ösuperstep¡£
4.2¡¡PregelÄ£ÐÍ¡ª¡ªÏñ¶¥µãÒ»Ñù˼¿¼ Pregel½è¼øMapReduceµÄ˼Ï룬²ÉÓÃÏûÏ¢ÔÚµãÖ®¼ä´«µÝÊý¾ÝµÄ·½Ê½£¬Ìá³öÁË¡°Ïñ¶¥µãÒ»Ñù˼¿¼¡±£¨Think
Like A Vertex£©µÄͼ¼ÆËãģʽ£¬²ÉÓÃÏûÏ¢ÔÚµãÖ®¼ä´«µÝÊý¾ÝµÄ·½Ê½£¬ÈÃÓû§ÎÞÐ迼ÂDz¢Ðзֲ¼Ê½¼ÆËãµÄϸ½Ú£¬Ö»ÐèҪʵÏÖÒ»¸ö¶¥µã¸üк¯Êý£¬Èÿò¼ÜÔÚ±éÀú¶¥µãʱ½øÐе÷Óü´¿É¡£
³£¼ûµÄ´úÂëÄ£°åÈçÏ£º

ÉÏͼ¼òÒªµØÃèÊöÁËPregelµÄ¼ÆËãÄ£ÐÍ£º
1.master½«Í¼½øÐзÖÇø£¬È»ºó½«Ò»¸ö»ò¶à¸öpartition·Ö¸øworker£»
2.workerΪÿһ¸öpartitionÆô¶¯Ò»¸öỊ̈߳¬¸ÃÏß³ÌÂÖѯpartitionÖеĶ¥µã£¬ÎªÃ¿Ò»¸öactive״̬µÄ¶¥µãµ÷ÓÃcompute·½·¨£»
3.computeÍê³Éºó£¬°´ÕÕedgeµÄÐÅÏ¢½«¼ÆËã½á¹ûͨ¹ýÏûÏ¢´«µÝ·½Ê½´«¸øÆäËü¶¥µã£»
4.Íê³Éͬ²½ºó£¬Öظ´Ö´ÐÐ2,3²Ù×÷£¬Ö±µ½Ã»ÓÐactive״̬¶¥µã»òÕßµü´ú´ÎÊýµ½´ïÖ¸¶¨ÊýÄ¿¡£
Õâ¸öÄ£ÐÍËäÈ»¼ò½à£¬µ«ºÜÈÝÒ×·¢ÏÖËüµÄȱÏÝ¡£¶ÔÓÚÁÚ¾ÓÊýºÜ¶àµÄ¶¥µã£¬ËüÐèÒª´¦ÀíµÄÏûÏ¢·Ç³£ÅӴ󣬶øÇÒÔÚÕâ¸öģʽÏ£¬ËüÃÇÊÇÎÞ·¨±»²¢·¢´¦ÀíµÄ¡£ËùÒÔ¶ÔÓÚ·ûºÏÃÝÂÉ·Ö²¼µÄ×ÔȻͼ£¬ÕâÖÖ¼ÆËãÄ£ÐÍϺÜÈÝÒ×·¢Éú¼ÙËÀ»òÕß±ÀÀ£¡£
×÷ΪµÚÒ»¸öͨÓõĴó¹æÄ£Í¼´¦Àíϵͳ£¬pregelÒѾΪ·Ö²¼Ê½Í¼´¦ÀíÂõ½øÁ˲»Ð¡µÄÒ»²½£¬Õâµã²»ÈÝÖÃÒÉ£¬µ«ÊÇpregelÔÚһЩµØ·½Ò²²»¾¡ÈçÈËÒ⣺
1.ÔÚͼµÄ»®·ÖÉÏ£¬²ÉÓõÄÊǼòµ¥µÄhash·½Ê½£¬ÕâÑù¹ÌÈ»Äܹ»Âú×ã¸ºÔØ¾ùºâ£¬µ«ÊÇhash·½Ê½²¢²»Äܸù¾ÝͼµÄÁ¬Í¨ÌØÐÔ½øÐл®·Ö£¬µ¼Ö³¬²½Ö®¼äµÄÏûÏ¢´«µÝ¿ªÏú¿ÉÄÜ»áÊÇÓ°ÏìÐÔÄܵÄ×î´óÒþ»¼¡£
2.¼òµ¥µÄcheckpoint»úÖÆÖ»ÄÜÏòºóʽµØ½«×´Ì¬»Ö¸´µ½µ±Ç°S³¬²½µÄ¼¸¸ö³¬²½Ö®Ç°£¬Òªµ½´ïS»¹ÐèÒªÖØ¸´¼ÆË㣬ÕâÆäʵҲÀË·ÑÁ˺ܶàʱ¼ä£¬Òò´ËÈçºÎÉè¼Æcheckpoint£¬Ê¹µÃÖ»ÐèÖØ¸´¼ÆËã¹ÊÕÏworkerµÄpartitionµÄ¼ÆËã½ÚÊ¡¼ÆËãÉõÖÁ¿ÉÒÔͨ¹ýcheckpointÖ±½Óµ½´ï¹ÊÕÏ·¢Éúǰһ³¬²½S£¬Ò²ÊÇÒ»¸öºÜÐèÒªÑо¿µÄµØ·½¡£
3.BSPÄ£Ðͱ¾ÉíÓÐÆä¾ÖÏÞÐÔ£¬ÕûÌåͬ²½²¢ÐжÔÓÚ¼ÆËã¿ìµÄworker³¤ÆÚµÈ´ýµÄÎÊÌâÎÞ·¨½â¾ö¡£
4.ÓÉÓÚpregelĿǰµÄ¼ÆËã״̬¶¼Êdz£×¤ÄÚ´æµÄ£¬¶ÔÓÚ¹æÄ£¼ÌÐøÔö´óµÄͼ´¦Àí¿ÉÄܻᵼÖÂÄÚ´æ²»×㣬ÈçºÎ½â¾öÉдýÑо¿¡£
4.3¡¡GASÄ£ÐÍ¡ª¡ªÁÚ¾Ó¸üÐÂÄ£ÐÍ Ïà±ÈPregelÄ£Ð͵ÄÏûϢͨÐÅ·¶Ê½£¬GraphLabµÄGASÄ£Ð͸üÆ«Ïò¹²ÏíÄÚ´æ·ç¸ñ¡£ËüÔÊÐíÓû§µÄ×Ô¶¨Ò庯Êý·ÃÎʵ±Ç°¶¥µãµÄÕû¸öÁÚÓò£¬¿É³éÏó³ÉGather¡¢ApplyºÍScatterÈý¸ö½×¶Î£¬¼ò³ÆÎªGAS¡£Ïà¶ÔÓ¦£¬Óû§ÐèҪʵÏÖÈý¸ö¶ÀÁ¢µÄº¯Êýgather¡¢applyºÍscatter¡£³£¼ûµÄ´úÂëÄ£°åÈçÏÂËùʾ£º

ÓÉÓÚgather/scatterº¯ÊýÊÇÒÔµ¥Ìõ±ßΪ²Ù×÷Á£¶È£¬ËùÒÔ¶ÔÓÚÒ»¸ö¶¥µãµÄÖÚ¶àÁڱߣ¬¿ÉÒÔ·Ö±ðÓÉÏàÓ¦µÄworker¶ÀÁ¢µ÷ÓÃgather/scatterº¯Êý¡£ÕâÒ»Éè¼ÆÖ÷ÒªÊÇΪÁËÊÊÓ¦µã·Ö¸îµÄͼ´æ´¢Ä£Ê½£¬´Ó¶ø±ÜÃâPregelÄ£ÐÍ»áÓöµ½µÄÎÊÌâ¡£
1.Gather½×¶Î
¹¤×÷¶¥µãµÄ±ß(¿ÉÄÜÊÇËùÓбߣ¬Ò²ÓпÉÄÜÊÇÈë±ß»òÕß³ö±ß)´ÓÁì½Ó¶¥µãºÍ×ÔÉíÊÕ¼¯Êý¾Ý£¬¼ÇΪgather_data_i£¬¸÷¸ö±ßµÄÊý¾Ýgraphlab»áÇóºÍ£¬¼ÇΪsum_data¡£ÕâÒ»½×¶Î¶Ô¹¤×÷¶¥µã¡¢±ß¶¼ÊÇÖ»¶ÁµÄ¡£
2.Apply½×¶Î
Mirror½«gather¼ÆËãµÄ½á¹ûsum_data·¢Ë͸ømaster¶¥µã£¬master½øÐлã×ÜΪtotal¡£MasterÀûÓÃtotalºÍÉÏÒ»²½µÄ¶¥µãÊý¾Ý£¬°´ÕÕÒµÎñÐèÇó½øÐнøÒ»²½µÄ¼ÆË㣬Ȼºó¸üÐÂmasterµÄ¶¥µãÊý¾Ý£¬²¢Í¬²½mirror¡£Apply½×¶ÎÖУ¬¹¤×÷¶¥µã¿ÉÐ޸쬱߲»¿ÉÐ޸ġ£
3.Scatter½×¶Î
¹¤×÷¶¥µã¸üÐÂÍê³ÉÖ®ºó£¬¸üбßÉϵÄÊý¾Ý£¬²¢Í¨Öª¶ÔÆäÓÐÒÀÀµµÄÁڽᶥµã¸üÐÂ״̬¡£Õâscatter¹ý³ÌÖУ¬¹¤×÷¶¥µãÖ»¶Á£¬±ßÉÏÊý¾Ý¿Éд¡£
ÔÚÖ´ÐÐÄ£ÐÍÖУ¬graphlabͨ¹ý¿ØÖÆÈý¸ö½×¶ÎµÄ¶ÁдȨÏÞÀ´´ïµ½»¥³âµÄÄ¿µÄ¡£ÔÚgather½×¶ÎÖ»¶Á£¬apply¶Ô¶¥µãֻд£¬scatter¶Ô±ßֻд¡£²¢ÐмÆËãµÄͬ²½Í¨¹ýmasterºÍmirrorÀ´ÊµÏÖ£¬mirrorÏ൱ÓÚÿ¸ö¶¥µã¶ÔÍâµÄÒ»¸ö½Ó¿ÚÈË£¬½«¸´ÔÓµÄÊý¾ÝͨÐųéÏó³É¶¥µãµÄÐÐΪ¡£
|