±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn,StormÊÇÒ»¸öÃâ·Ñ¿ªÔ´¡¢·Ö²¼Ê½¡¢¸ßÈÝ´íµÄʵʱ¼ÆËãϵͳ¡£ |
|
1. ʲôÊÇStorm
StormÊÇTwitter¿ªÔ´µÄÒ»¸ö·Ö²¼Ê½µÄʵʱ¼ÆËãϵͳ¡£
2. StormµÄÉè¼ÆË¼Ïë

- StormÊǶÔÁ÷StreamµÄ³éÏó£¬Á÷ÊÇÒ»¸ö²»¼ä¶ÏµÄÎÞ½çµÄÁ¬Ðøtuple£¬×¢ÒâStormÔÚ½¨Ä£Ê¼þÁ÷ʱ£¬°ÑÁ÷ÖеÄʼþ³éÏóΪtuple¼´Ôª×é¡£
- Storm½«Á÷ÖÐÔªËØ³éÏóΪTuple£¬Ò»¸ötuple¾ÍÊÇÒ»¸öÖµÁбívalue
list£¬listÖеÄÿ¸övalue¶¼ÓÐÒ»¸öname£¬²¢ÇÒ¸Ãvalue¿ÉÒÔÊÇ»ù±¾ÀàÐÍ£¬×Ö·ûÀàÐÍ£¬×Ö½ÚÊý×éµÈ£¬µ±È»Ò²¿ÉÒÔÊÇÆäËû¿ÉÐòÁл¯µÄÀàÐÍ¡£
- StormÈÏΪÿ¸östream¶¼ÓÐÒ»¸östreamÔ´£¬Ò²¾ÍÊÇÔʼԪ×éµÄÔ´Í·£¬ËùÒÔËü½«Õâ¸öÔ´Í·³ÆÎªSpout¡£
- ÓÐÁËÔ´Í·¼´spoutÒ²¾ÍÊÇÓÐÁËstream£¬ÄÇô¸ÃÈçºÎ´¦ÀístreamÄÚµÄtupleÄØ¡£½«Á÷µÄ״̬ת»»³ÆÎªBolt£¬bolt¿ÉÒÔÏû·ÑÈÎÒâÊýÁ¿µÄÊäÈëÁ÷£¬Ö»Òª½«Á÷·½Ïòµ¼Ïò¸Ãbolt£¬Í¬Ê±ËüÒ²¿ÉÒÔ·¢ËÍеÄÁ÷¸øÆäËûboltʹÓã¬ÕâÑùÒ»À´£¬Ö»Òª´ò¿ªÌض¨µÄspout£¨¹Ü¿Ú£©ÔÙ½«spoutÖÐÁ÷³öµÄtupleµ¼ÏòÌØ¶¨µÄbolt£¬ÓÖbolt¶Ôµ¼ÈëµÄÁ÷×ö´¦ÀíºóÔÙµ¼ÏòÆäËûbolt»òÕßÄ¿µÄµØ¡£
- ÒÔÉÏ´¦Àí¹ý³Ìͳ³ÆÎªTopology¼´ÍØÆË¡£ÍØÆËÊÇstormÖÐ×î¸ß²ã´ÎµÄÒ»¸ö³éÏó¸ÅÄËü¿ÉÒÔ±»Ìá½»µ½storm¼¯ÈºÖ´ÐУ¬Ò»¸öÍØÆË¾ÍÊÇÒ»¸öÁ÷ת»»Í¼£¬Í¼ÖÐÿ¸ö½ÚµãÊÇÒ»¸öspout»òÕßbolt£¬Í¼Öеı߱íʾbolt¶©ÔÄÁËÄÄЩÁ÷£¬µ±spout»òÕßbolt·¢ËÍÔª×éµ½Á÷ʱ£¬Ëü¾Í·¢ËÍÔª×鵽ÿ¸ö¶©ÔÄÁ˸ÃÁ÷µÄbolt£¨Õâ¾ÍÒâζ×Ų»ÐèÒªÎÒÃÇÊÖ¹¤À¹ÜµÀ£¬Ö»ÒªÔ¤Ïȶ©ÔÄ£¬spout¾Í»á½«Á÷·¢µ½Êʵ±boltÉÏ£©¡£
- ÍØÆËµÄÿ¸ö½Úµã¶¼ÒªËµÃ÷ËüËù·¢Éä³öµÄÔª×éµÄ×ֶεÄname£¬ÆäËû½ÚµãÖ»ÐèÒª¶©ÔĸÃname¾Í¿ÉÒÔ½ÓÊÕ´¦Àí¡£
3.Storm¼¯Èº½á¹¹


- Storm¼¯Èº±íÃæÀàËÆHadoop¼¯Èº¡£µ«ÔÚHadoopÉÏÄãÔËÐÐÊÇ¡±MapReduce
jobs¡±£¬ÔÚStormÉÏÄãÔËÐеÄÊÇ¡±topologies¡±¡£¡±Jobs¡±ºÍ¡±topologies¡±ÊÇ´ó²»Í¬µÄ£¬Ò»¸ö¹Ø¼ü²»Í¬ÊÇÒ»¸öMapReduceµÄJob×îÖÕ»á½áÊø£¬¶øÒ»¸ötopologyÓÀÔ¶´¦ÀíÏûÏ¢£¨»òÖ±µ½ÄãkillËü£©¡£
- Storm¼¯ÈºÓÐÁ½Öֽڵ㣺¿ØÖÆ£¨master£©½ÚµãºÍ¹¤×÷Õߣ¨worker£©½Úµã¡£
- ¿ØÖƽڵãÔËÐÐÒ»¸ö³ÆÖ®Îª¡±Nimbus¡±µÄºǫ́³ÌÐò£¬ËüÀàËÆÓÚHaddopµÄ¡±JobTracker¡±¡£Nimbus¸ºÔðÔÚ¼¯Èº·¶Î§ÄÚ·Ö·¢´úÂ롢Ϊworker·ÖÅäÈÎÎñºÍ¹ÊÕϼà²â¡£
- ÿ¸ö¹¤×÷Õß½ÚµãÔËÐÐÒ»¸ö³ÆÖ®¡±Supervisor¡±µÄºǫ́³ÌÐò¡£Supervisor¼àÌý·ÖÅ䏸ËüËùÔÚ»úÆ÷µÄ¹¤×÷£¬»ùÓÚNimbus·ÖÅ䏸ËüµÄÊÂÇéÀ´¾ö¶¨Æô¶¯»òÍ£Ö¹¹¤×÷Õß½ø³Ì¡£Ã¿¸ö¹¤×÷Õß½ø³ÌÖ´ÐÐÒ»¸ötopologyµÄ×Ó¼¯£¨Ò²¾ÍÊÇÒ»¸ö×ÓÍØÆË½á¹¹£©£»Ò»¸öÔËÐÐÖеÄtopologyÓÉÐí¶à¿ç¶à¸ö»úÆ÷µÄ¹¤×÷Õß½ø³Ì×é³É¡£
- Ò»¸öZookeeper¼¯Èº¸ºÔðNimbusºÍ¶à¸öSupervisorÖ®¼äµÄËùÓÐе÷¹¤×÷£¨Ò»¸öÍêÕûµÄÍØÆË¿ÉÄܱ»·ÖΪ¶à¸ö×ÓÍØÆË²¢Óɶà¸ösupervisorÍê³É£©¡£
- ´ËÍ⣬Nimbusºǫ́³ÌÐòºÍSupervisorºǫ́³ÌÐò¶¼ÊÇ¿ìËÙʧ°Ü£¨fail-fast£©ºÍÎÞ״̬µÄ£»ËùÓÐ״̬ά³ÖÔÚZookeeper»ò±¾µØ´ÅÅÌ¡£ÕâÒâζ×ÅÄã¿ÉÒÔkill -9ɱµônimbus½ø³ÌºÍsupervisor½ø³Ì£¬È»ºóÖØÆô£¬ËüÃǽ«»Ö¸´×´Ì¬²¢¼ÌÐø¹¤×÷£¬¾ÍÏñʲôҲû·¢Éú¡£ÕâÖÖÉè¼ÆÊ¹storm¼«ÆäÎȶ¨¡£ÕâÖÖÉè¼ÆÖÐMaster²¢Ã»ÓÐÖ±½ÓºÍworkerͨÐÅ£¬¶øÊǽèÖúÒ»¸öÖнéZookeeper£¬ÕâÑùÒ»À´¿ÉÒÔ·ÖÀëmasterºÍworkerµÄÒÀÀµ£¬½«×´Ì¬ÐÅÏ¢´æ·ÅÔÚzookeeper¼¯ÈºÄÚÒÔ¿ìËٻظ´ÈκÎʧ°ÜµÄÒ»·½¡£
4.StormµÄÖØÒª¸ÅÄî
- worker£º
Supervisor»á¼àÌý·ÖÅ䏸ËüÄÇ̨»úÆ÷µÄ¹¤×÷£¬¸ù¾ÝÐèÒªÆô¶¯/¹Ø±Õ¹¤×÷½ø³Ì£¬Õâ¸ö¹¤×÷½ø³Ì¾ÍÊÇworker
ÿһ¸öworker¶¼»áÕ¼Óù¤×÷½ÚµãµÄÒ»¸ö¶Ë¿Ú£¬Õâ¸ö¶Ë¿Ú¿ÉÒÔÔÚstorm.yarmÖÐÅäÖá£
Ò»¸ötopology¿ÉÄÜ»áÔÚÒ»¸ö»òÕß¶à¸ö¹¤×÷½ø³ÌÀïÃæÖ´ÐУ¬Ã¿¸ö¹¤×÷½ø³ÌÖ´ÐÐÕû¸ötopologyµÄÒ»²¿·Ö£¬ËùÒÔÒ»¸öÔËÐеÄtopologyÓÉÔËÐÐÔںܶà»úÆ÷Éϵĺܶ๤×÷½ø³Ì×é³É¡£
- Task:
ÿһ¸öSpoutºÍBolt»á±»µ±×÷ºÜ¶àtaskÔÚÕû¸ö¼¯ÈºÀïÃæÖ´ÐС£Ä¬ÈÏÇé¿öÏÂÿһ¸ötask¶ÔÓ¦µ½Ò»¸öỊ̈߳¨Executor£©£¬Õâ¸öÏß³ÌÓÃÀ´Ö´ÐÐÕâ¸ötask£¬¶østream groupingÔòÊǶ¨ÒåÔõô´ÓÒ»¶Ñtask·¢Éätupleµ½ÁíÍâÒ»¶Ñtask¡£
- ÿ̨supervisorÔËÐÐ×ÅÈô¸É¸öWorker½ø³Ì£¬Ã¿¸öWorker½ø³ÌÔËÐÐ×ÅÈô¸É¸öExecutorỊ̈߳¬Ã¿¸öExecutorÏß³ÌÔËÐÐ×Åͬһ¸öcomponent£¨Spout»òBolt£©µÄÒ»¸ö»ò¶à¸ötask¡£

- Config(ÅäÖÃ)£º
stormÀïÃæÓÐÒ»¶Ñ²ÎÊý¿ÉÒÔÅäÖÃÀ´µ÷Õûnimbus, supervisorÒÔ¼°ÕýÔÚÔËÐеÄtopologyµÄÐÐΪ£¬ һЩÅäÖÃÊÇϵͳ¼¶±ðµÄ£¬ һЩÅäÖÃÊÇtopology¼¶±ðµÄ¡£ËùÓÐÓÐĬÈÏÖµµÄÅäÖõÄĬÈÏÅäÖÃÊÇÅäÖÃÔÚdefault.xmlÀïÃæµÄ¡£Äã¿ÉÒÔͨ¹ý¶¨Òå¸östorm.xmlÔÚÄãµÄclasspathÀåÃ×À´¸²¸ÇÕâЩĬÈÏÅäÖᣲ¢ÇÒÄãÒ²¿ÉÒÔÔÚ´úÂëÀïÃæÉèÖÃһЩtopologyÏà¹ØµÄÅäÖÃÐÅÏ¢ ¨C ʹÓÃStormSubmitter¡£µ±È»£¬ÕâЩÅäÖõÄÓÅÏȼ¶ÊÇ: default.xml < storm.xml < TOPOLOGY-SPECIFICÅäÖá£
- Stream Grouping£¨ÏûÏ¢·Ö·¢²ßÂÔ£©£º

- Shuffle Grouping£ºËæ»ú·Ö×é£¬Ëæ»úÅÉ·¢streamÀïÃæµÄtuple£¬±£Ö¤Ã¿¸öbolt½ÓÊÕµ½µÄtupleÊýÄ¿Ïàͬ¡£
- FieldsGrouping£º°´×ֶηÖ×飬±ÈÈç°´useridÀ´·Ö×飬¾ßÓÐͬÑùuseridµÄtuple»á±»·Öµ½ÏàͬµÄBolts£¬¶ø²»Í¬µÄuseridÔò»á±»·ÖÅäµ½²»Í¬µÄBolts¡£
- All Grouping£º¹ã²¥·¢ËÍ£¬¶ÔÓÚÿһ¸ötuple£¬ËùÓеÄBolts¶¼»áÊÕµ½¡£
- Global Grouping:È«¾Ö·Ö×飬Õâ¸ötuple±»·ÖÅäµ½stormÖеÄÒ»¸öboltµÄÆäÖÐÒ»¸ötask¡£ÔÙ¾ßÌåÒ»µã¾ÍÊÇ·ÖÅ䏸idÖµ×îµÍµÄÄǸötask¡£
- NonGrouping£º²»·Ö×飬Õâ¸ö·Ö×éµÄÒâ˼ÊÇ˵stream²»¹ØÐĵ½µ×Ë»áÊÕµ½ËüµÄtuple¡£Ä¿Ç°ÕâÖÖ·Ö×éºÍShuffle groupingÊÇÒ»ÑùµÄЧ¹û£¬ÓÐÒ»µã²»Í¬µÄÊÇstorm»á°ÑÕâ¸öbolt·Åµ½Õâ¸öboltµÄ¶©ÔÄÕßͬһ¸öÏß³ÌÀïÃæÈ¥Ö´ÐС£
- Direct Grouping£ºÖ±½Ó·Ö×é,
ÕâÊÇÒ»ÖֱȽÏÌØ±ðµÄ·Ö×é·½·¨£¬ÓÃÕâÖÖ·Ö×éÒâζ×ÅÏûÏ¢µÄ·¢ËÍÕßÖ¸¶¨ÓÉÏûÏ¢½ÓÊÕÕßµÄÄĸötask´¦ÀíÕâ¸öÏûÏ¢¡£Ö»Óб»ÉùÃ÷ΪDirect StreamµÄÏûÏ¢Á÷¿ÉÒÔÉùÃ÷ÕâÖÖ·Ö×é·½·¨¡£¶øÇÒÕâÖÖÏûÏ¢tuple±ØÐëʹÓÃemitDirect·½·¨À´·¢Éä¡£ÏûÏ¢´¦ÀíÕß¿ÉÒÔͨ¹ýTopologyContextÀ´»ñÈ¡´¦ÀíËüµÄÏûÏ¢µÄtaskid
(OutputCollector.emit·½·¨Ò²»á·µ»Øtaskid)¡£
5.Storm¿É¿¿ÐÔ£º
1¡¢worker½ø³Ì¹Òµô
storm»áÖØÐÂÔÙÆô¶¯Ò»¸öworker
2¡¢supervisor½ø³Ì¹Òµô
²»»áÓ°Ïì֮ǰÒѾÌá½»µÄtopology£¬Ö»ÊǺóÆÚ²»»áÔÙÏòÕâ¸ö½Úµã·ÖÅäÈÎÎñÁË¡£
3¡¢nimbus½ø³Ì¹Òµô
²»»áÓ°Ïì֮ǰÒѾÌá½»µÄtopology£¬Ö»ÊǺóÆÚ²»ÄÜÔÙÏò¼¯ÈºÌá½»topologyÁË¡£
4¡¢ack/failÏûϢȷÈÏ»úÖÆ(È·±£Ò»¸ötuple±»ÍêÈ«´¦Àí)
ÔÚspoutÖз¢ÉätupleµÄʱºòÐèҪͬʱ·¢ËÍmessageid£¬ÕâÑù²ÅÏ൱ÓÚ¿ªÆôÁËÏûϢȷÈÏ»úÖÆ
Èç¹ûÄãµÄtopologyÀïÃæµÄtuple±È½Ï¶àµÄ»°£¬ ÄÇô°ÑackerµÄÊýÁ¿ÉèÖöàÒ»µã,ЧÂÊ»á¸ßÒ»µã¡£
ͨ¹ýconfig.setNumAckers(num)À´ÉèÖÃÒ»¸ötopologyÀïÃæµÄackerµÄÊýÁ¿£¬Ä¬ÈÏÖµÊÇ1¡£
×¢Ò⣺ ackerÓÃÁËÌØÊâµÄËã·¨£¬Ê¹µÃ¶ÔÓÚ×·×Ùÿ¸öspout tupleµÄ״̬ËùÐèÒªµÄÄÚ´æÁ¿ÊǺ㶨µÄ£¨20 bytes)
×¢Ò⣺Èç¹ûÒ»¸ötupleÔÚÖ¸¶¨µÄtimeout(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECSĬÈÏֵΪ30Ãë)ʱ¼äÄÚûÓб»³É¹¦´¦Àí£¬ÄÇôÕâ¸ötuple»á±»ÈÏΪ´¦Àíʧ°ÜÁË¡£
|