ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

´óÊý¾ÝÀëÏß½×¶ÎDay8Ö®MapReduce¹¤×÷»úÖÆÏê½â

¸üÐÂʱ¼ä:2018Äê10ÔÂ24ÈÕ16ʱ12·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

¡¡¡¡

¡¡¡¡1.MapTask¹¤×÷»úÖÆ

¡¡¡¡Õû¸öMap½×¶ÎÁ÷³Ì´óÌåÈçÉÏͼËùʾ¡£¼òµ¥¸ÅÊö£ºinput Fileͨ¹ýsplit±»Âß¼­ÇзÖΪ¶à¸ösplitÎļþ£¬Í¨¹ýRecord°´ÐжÁÈ¡ÄÚÈݸømap(Óû§×Ô¼ºÊµÏÖµÄ)½øÐд¦Àí£¬Êý¾Ý±»map´¦Àí½áÊøÖ®ºó½»¸øOutputCollectorÊÕ¼¯Æ÷£¬¶ÔÆä½á¹ûkey½øÐзÖÇø(ĬÈÏʹÓÃhash·ÖÇø)£¬È»ºóдÈëbuffer£¬Ã¿¸ömap task¶¼ÓÐÒ»¸öÄڴ滺³åÇø£¬´æ´¢×ÅmapµÄÊä³ö½á¹û£¬µ±»º³åÇø¿ìÂúµÄʱºòÐèÒª½«»º³åÇøµÄÊý¾ÝÒÔÒ»¸öÁÙʱÎļþµÄ·½Ê½´æ·Åµ½´ÅÅÌ£¬µ±Õû¸ömap task½áÊøºóÔÙ¶Ô´ÅÅÌÖÐÕâ¸ömap task²úÉúµÄËùÓÐÁÙʱÎļþ×öºÏ²¢£¬Éú³É×îÖÕµÄÕýʽÊä³öÎļþ£¬È»ºóµÈ´ýreduce taskÀ´À­Êý¾Ý¡£

¡¡¡¡Ïêϸ²½Ö裺

¡¡¡¡Ø Ê×ÏÈ£¬¶ÁÈ¡Êý¾Ý×é¼þInputFormat(ĬÈÏTextInputFormat)»áͨ¹ýgetSplits·½·¨¶ÔÊäÈëĿ¼ÖÐÎļþ½øÐÐÂß¼­ÇÐÆ¬¹æ»®µÃµ½splits£¬ÓжàÉÙ¸ösplit¾Í¶ÔÓ¦Æô¶¯¶àÉÙ¸öMapTask¡£splitÓëblockµÄ¶ÔÓ¦¹ØÏµÄ¬ÈÏÊÇÒ»¶ÔÒ»¡£

¡¡¡¡Ø ½«ÊäÈëÎļþÇзÖΪsplitsÖ®ºó£¬ÓÉRecordReader¶ÔÏó(ĬÈÏLineRecordReader)½øÐжÁÈ¡£¬ÒÔ\n×÷Ϊ·Ö¸ô·û£¬¶ÁȡһÐÐÊý¾Ý£¬·µ»Ø¡£Key±íʾÿÐÐÊ××Ö·ûÆ«ÒÆÖµ£¬value±íʾÕâÒ»ÐÐÎı¾ÄÚÈÝ¡£

¡¡¡¡Ø ¶ÁÈ¡split·µ»Ø£¬½øÈëÓû§×Ô¼º¼Ì³ÐµÄMapperÀàÖУ¬Ö´ÐÐÓû§ÖØÐ´µÄmapº¯Êý¡£RecordReader¶ÁȡһÐÐÕâÀïµ÷ÓÃÒ»´Î¡£

¡¡¡¡Ø mapÂß¼­ÍêÖ®ºó£¬½«mapµÄÿÌõ½á¹ûͨ¹ýcontext.write½øÐÐcollectÊý¾ÝÊÕ¼¯¡£ÔÚcollectÖУ¬»áÏÈ¶ÔÆä½øÐзÖÇø´¦Àí£¬Ä¬ÈÏʹÓÃHashPartitioner¡£

¡¡¡¡MapReduceÌṩPartitioner½Ó¿Ú£¬ËüµÄ×÷ÓþÍÊǸù¾Ýkey»òvalue¼°reduceµÄÊýÁ¿À´¾ö¶¨µ±Ç°µÄÕâ¶ÔÊä³öÊý¾Ý×îÖÕÓ¦¸Ã½»ÓÉÄĸöreduce task´¦Àí¡£Ä¬È϶Ôkey hashºóÔÙÒÔreduce taskÊýÁ¿È¡Ä£¡£Ä¬ÈϵÄȡģ·½Ê½Ö»ÊÇΪÁËÆ½¾ùreduceµÄ´¦ÀíÄÜÁ¦£¬Èç¹ûÓû§×Ô¼º¶ÔPartitionerÓÐÐèÇ󣬿ÉÒÔ¶©ÖƲ¢ÉèÖõ½jobÉÏ¡£

¡¡¡¡Ø ½ÓÏÂÀ´£¬»á½«Êý¾ÝдÈëÄڴ棬ÄÚ´æÖÐÕâÆ¬ÇøÓò½Ð×ö»·Ðλº³åÇø£¬»º³åÇøµÄ×÷ÓÃÊÇÅúÁ¿ÊÕ¼¯map½á¹û£¬¼õÉÙ´ÅÅÌIOµÄÓ°Ïì¡£ÎÒÃǵÄkey/value¶ÔÒÔ¼°PartitionµÄ½á¹û¶¼»á±»Ð´È뻺³åÇø¡£µ±È»Ð´Èë֮ǰ£¬keyÓëvalueÖµ¶¼»á±»ÐòÁл¯³É×Ö½ÚÊý×é¡£

¡¡¡¡»·Ðλº³åÇøÆäʵÊÇÒ»¸öÊý×飬Êý×éÖдæ·Å×Åkey¡¢valueµÄÐòÁл¯Êý¾ÝºÍkey¡¢valueµÄÔªÊý¾ÝÐÅÏ¢£¬°üÀ¨partition¡¢keyµÄÆðʼλÖá¢valueµÄÆðʼλÖÃÒÔ¼°valueµÄ³¤¶È¡£»·ÐνṹÊÇÒ»¸ö³éÏó¸ÅÄî¡£

¡¡¡¡»º³åÇøÊÇÓдóСÏÞÖÆ£¬Ä¬ÈÏÊÇ100MB¡£µ±map taskµÄÊä³ö½á¹ûºÜ¶àʱ£¬¾Í¿ÉÄÜ»á³Å±¬Äڴ棬ËùÒÔÐèÒªÔÚÒ»¶¨Ìõ¼þϽ«»º³åÇøÖеÄÊý¾ÝÁÙʱдÈë´ÅÅÌ£¬È»ºóÖØÐÂÀûÓÃÕâ¿é»º³åÇø¡£Õâ¸ö´ÓÄÚ´æÍù´ÅÅÌдÊý¾ÝµÄ¹ý³Ì±»³ÆÎªSpill£¬ÖÐÎÄ¿ÉÒëΪÒçд¡£Õâ¸öÒçдÊÇÓɵ¥¶ÀÏß³ÌÀ´Íê³É£¬²»Ó°ÏìÍù»º³åÇøÐ´map½á¹ûµÄÏ̡߳£ÒçдÏß³ÌÆô¶¯Ê±²»Ó¦¸Ã×èÖ¹mapµÄ½á¹ûÊä³ö£¬ËùÒÔÕû¸ö»º³åÇøÓиöÒçдµÄ±ÈÀýspill.percent¡£Õâ¸ö±ÈÀýĬÈÏÊÇ0.8£¬Ò²¾ÍÊǵ±»º³åÇøµÄÊý¾ÝÒѾ­´ïµ½ãÐÖµ(buffer size * spill percent = 100MB * 0.8 = 80MB)£¬ÒçдÏß³ÌÆô¶¯£¬Ëø¶¨Õâ80MBµÄÄڴ棬ִÐÐÒçд¹ý³Ì¡£Map taskµÄÊä³ö½á¹û»¹¿ÉÒÔÍùʣϵÄ20MBÄÚ´æÖÐд£¬»¥²»Ó°Ïì¡£

¡¡¡¡Ø µ±ÒçдÏß³ÌÆô¶¯ºó£¬ÐèÒª¶ÔÕâ80MB¿Õ¼äÄÚµÄkey×öÅÅÐò(Sort)¡£ÅÅÐòÊÇMapReduceÄ£ÐÍĬÈϵÄÐÐΪ£¬ÕâÀïµÄÅÅÐòÒ²ÊǶÔÐòÁл¯µÄ×Ö½Ú×öµÄÅÅÐò¡£

¡¡¡¡Èç¹ûjobÉèÖùýCombiner£¬ÄÇôÏÖÔÚ¾ÍÊÇʹÓÃCombinerµÄʱºòÁË¡£½«ÓÐÏàͬkeyµÄkey/value¶ÔµÄvalue¼ÓÆðÀ´£¬¼õÉÙÒçдµ½´ÅÅ̵ÄÊý¾ÝÁ¿¡£Combiner»áÓÅ»¯MapReduceµÄÖмä½á¹û£¬ËùÒÔËüÔÚÕû¸öÄ£ÐÍÖлá¶à´ÎʹÓá£

¡¡¡¡ÄÇÄÄЩ³¡¾°²ÅÄÜʹÓÃCombinerÄØ?´ÓÕâÀï·ÖÎö£¬CombinerµÄÊä³öÊÇReducerµÄÊäÈ룬Combiner¾ø²»Äܸıä×îÖյļÆËã½á¹û¡£CombinerÖ»Ó¦¸ÃÓÃÓÚÄÇÖÖReduceµÄÊäÈëkey/valueÓëÊä³ökey/valueÀàÐÍÍêȫһÖ£¬ÇÒ²»Ó°Ïì×îÖÕ½á¹ûµÄ³¡¾°¡£±ÈÈçÀÛ¼Ó£¬×î´óÖµµÈ¡£CombinerµÄʹÓÃÒ»¶¨µÃÉ÷ÖØ£¬Èç¹ûÓúã¬Ëü¶ÔjobÖ´ÐÐЧÂÊÓаïÖú£¬·´Ö®»áÓ°ÏìreduceµÄ×îÖÕ½á¹û¡£

¡¡¡¡Ø ÿ´ÎÒçд»áÔÚ´ÅÅÌÉÏÉú³ÉÒ»¸öÁÙʱÎļþ(д֮ǰÅжÏÊÇ·ñÓÐcombiner)£¬Èç¹ûmapµÄÊä³ö½á¹ûÕæµÄºÜ´ó£¬Óжà´ÎÕâÑùµÄÒçд·¢Éú£¬´ÅÅÌÉÏÏàÓ¦µÄ¾Í»áÓжà¸öÁÙʱÎļþ´æÔÚ¡£µ±Õû¸öÊý¾Ý´¦Àí½áÊøÖ®ºó¿ªÊ¼¶Ô´ÅÅÌÖеÄÁÙʱÎļþ½øÐÐmergeºÏ²¢£¬ÒòΪ×îÖÕµÄÎļþÖ»ÓÐÒ»¸ö£¬Ð´Èë´ÅÅÌ£¬²¢ÇÒΪÕâ¸öÎļþÌṩÁËÒ»¸öË÷ÒýÎļþ£¬ÒԼǼÿ¸öreduce¶ÔÓ¦Êý¾ÝµÄÆ«ÒÆÁ¿¡£

¡¡¡¡ÖÁ´ËmapÕû¸ö½×¶Î½áÊø¡£

¡¡¡¡2.

¡¡¡¡

¡¡¡¡ReduceTask¹¤×÷»úÖÆ

¡¡¡¡Reduce´óÖ·ÖΪcopy¡¢sort¡¢reduceÈý¸ö½×¶Î£¬ÖصãÔÚǰÁ½¸ö½×¶Î¡£copy½×¶Î°üº¬Ò»¸öeventFetcherÀ´»ñÈ¡ÒÑÍê³ÉµÄmapÁбí£¬ÓÉFetcherÏß³ÌÈ¥copyÊý¾Ý£¬Ôڴ˹ý³ÌÖлáÆô¶¯Á½¸ömergeỊ̈߳¬·Ö±ðΪinMemoryMergerºÍonDiskMerger£¬·Ö±ð½«ÄÚ´æÖеÄÊý¾Ýmergeµ½´ÅÅ̺ͽ«´ÅÅÌÖеÄÊý¾Ý½øÐÐmerge¡£´ýÊý¾ÝcopyÍê³ÉÖ®ºó£¬copy½×¶Î¾ÍÍê³ÉÁË£¬¿ªÊ¼½øÐÐsort½×¶Î£¬sort½×¶ÎÖ÷ÒªÊÇÖ´ÐÐfinalMerge²Ù×÷£¬´¿´âµÄsort½×¶Î£¬Íê³ÉÖ®ºó¾ÍÊÇreduce½×¶Î£¬µ÷ÓÃÓû§¶¨ÒåµÄreduceº¯Êý½øÐд¦Àí¡£

¡¡¡¡Ïêϸ²½Ö裺

¡¡¡¡Ø Copy½×¶Î£¬¼òµ¥µØÀ­È¡Êý¾Ý¡£Reduce½ø³ÌÆô¶¯Ò»Ð©Êý¾ÝcopyÏß³Ì(Fetcher)£¬Í¨¹ýHTTP·½Ê½ÇëÇómaptask»ñÈ¡ÊôÓÚ×Ô¼ºµÄÎļþ¡£

¡¡¡¡Ø Merge½×¶Î¡£ÕâÀïµÄmergeÈçmap¶ËµÄmerge¶¯×÷£¬Ö»ÊÇÊý×éÖдæ·ÅµÄÊDz»Í¬map¶ËcopyÀ´µÄÊýÖµ¡£Copy¹ýÀ´µÄÊý¾Ý»áÏÈ·ÅÈëÄڴ滺³åÇøÖУ¬ÕâÀïµÄ»º³åÇø´óСҪ±Èmap¶ËµÄ¸üΪÁé»î¡£mergeÓÐÈýÖÖÐÎʽ£ºÄÚ´æµ½ÄÚ´æ;ÄÚ´æµ½´ÅÅÌ;´ÅÅ̵½´ÅÅÌ¡£Ä¬ÈÏÇé¿öϵÚÒ»ÖÖÐÎʽ²»ÆôÓᣵ±ÄÚ´æÖеÄÊý¾ÝÁ¿µ½´ïÒ»¶¨ãÐÖµ£¬¾ÍÆô¶¯ÄÚ´æµ½´ÅÅ̵Ämerge¡£Óëmap ¶ËÀàËÆ£¬ÕâÒ²ÊÇÒçдµÄ¹ý³Ì£¬Õâ¸ö¹ý³ÌÖÐÈç¹ûÄãÉèÖÃÓÐCombiner£¬Ò²ÊÇ»áÆôÓõģ¬È»ºóÔÚ´ÅÅÌÖÐÉú³ÉÁËÖÚ¶àµÄÒçдÎļþ¡£µÚ¶þÖÖmerge·½Ê½Ò»Ö±ÔÚÔËÐУ¬Ö±µ½Ã»ÓÐmap¶ËµÄÊý¾Ýʱ²Å½áÊø£¬È»ºóÆô¶¯µÚÈýÖÖ´ÅÅ̵½´ÅÅ̵Ämerge·½Ê½Éú³É×îÖÕµÄÎļþ¡£

¡¡¡¡Ø °Ñ·ÖÉ¢µÄÊý¾ÝºÏ²¢³ÉÒ»¸ö´óµÄÊý¾Ýºó£¬»¹»áÔٶԺϲ¢ºóµÄÊý¾ÝÅÅÐò¡£

¡¡¡¡Ø ¶ÔÅÅÐòºóµÄ¼üÖµ¶Ôµ÷ÓÃreduce·½·¨£¬¼üÏàµÈµÄ¼üÖµ¶Ôµ÷ÓÃÒ»´Îreduce·½·¨£¬Ã¿´Îµ÷Óûá²úÉúÁã¸ö»òÕß¶à¸ö¼üÖµ¶Ô£¬×îºó°ÑÕâЩÊä³öµÄ¼üÖµ¶ÔдÈëµ½HDFSÎļþÖС£

¡¡¡¡3. Shuffle»úÖÆ

¡¡¡¡map½×¶Î´¦ÀíµÄÊý¾ÝÈçºÎ´«µÝ¸øreduce½×¶Î£¬ÊÇMapReduce¿ò¼ÜÖÐ×î¹Ø¼üµÄÒ»¸öÁ÷³Ì£¬Õâ¸öÁ÷³Ì¾Í½Ðshuffle¡£

¡¡¡¡shuffle: Ï´ÅÆ¡¢·¢ÅÆ——(ºËÐÄ»úÖÆ£ºÊý¾Ý·ÖÇø£¬ÅÅÐò£¬ºÏ²¢)¡£

¡¡¡¡

¡¡¡¡shuffleÊÇMapreduceµÄºËÐÄ£¬Ëü·Ö²¼ÔÚMapreduceµÄmap½×¶ÎºÍreduce½×¶Î¡£Ò»°ã°Ñ´ÓMap²úÉúÊä³ö¿ªÊ¼µ½ReduceÈ¡µÃÊý¾Ý×÷ΪÊäÈë֮ǰµÄ¹ý³Ì³Æ×÷shuffle¡£

¡¡¡¡1).Collect½×¶Î£º½«MapTaskµÄ½á¹ûÊä³öµ½Ä¬ÈÏ´óСΪ100MµÄ»·Ðλº³åÇø£¬±£´æµÄÊÇkey/value£¬Partition·ÖÇøÐÅÏ¢µÈ¡£

¡¡¡¡2).Spill½×¶Î£ºµ±ÄÚ´æÖеÄÊý¾ÝÁ¿´ïµ½Ò»¶¨µÄ·§ÖµµÄʱºò£¬¾Í»á½«Êý¾ÝдÈë±¾µØ´ÅÅÌ£¬ÔÚ½«Êý¾ÝдÈë´ÅÅÌ֮ǰÐèÒª¶ÔÊý¾Ý½øÐÐÒ»´ÎÅÅÐòµÄ²Ù×÷£¬Èç¹ûÅäÖÃÁËcombiner£¬»¹»á½«ÓÐÏàͬ·ÖÇøºÅºÍkeyµÄÊý¾Ý½øÐÐÅÅÐò¡£

¡¡¡¡3).Merge½×¶Î£º°ÑËùÓÐÒç³öµÄÁÙʱÎļþ½øÐÐÒ»´ÎºÏ²¢²Ù×÷£¬ÒÔÈ·±£Ò»¸öMapTask×îÖÕÖ»²úÉúÒ»¸öÖмäÊý¾ÝÎļþ¡£

¡¡¡¡4).Copy½×¶Î£º ReduceTaskÆô¶¯FetcherÏ̵߳½ÒѾ­Íê³ÉMapTaskµÄ½ÚµãÉϸ´ÖÆÒ»·ÝÊôÓÚ×Ô¼ºµÄÊý¾Ý£¬ÕâЩÊý¾ÝĬÈϻᱣ´æÔÚÄÚ´æµÄ»º³åÇøÖУ¬µ±ÄÚ´æµÄ»º³åÇø´ïµ½Ò»¶¨µÄ·§ÖµµÄʱºò£¬¾Í»á½«Êý¾Ýдµ½´ÅÅÌÖ®ÉÏ¡£

¡¡¡¡5).Merge½×¶Î£ºÔÚReduceTaskÔ¶³Ì¸´ÖÆÊý¾ÝµÄͬʱ£¬»áÔÚºǫ́¿ªÆôÁ½¸öÏ̶߳ÔÄÚ´æµ½±¾µØµÄÊý¾ÝÎļþ½øÐкϲ¢²Ù×÷¡£

¡¡¡¡6).Sort½×¶Î£ºÔÚ¶ÔÊý¾Ý½øÐкϲ¢µÄͬʱ£¬»á½øÐÐÅÅÐò²Ù×÷£¬ÓÉÓÚMapTask½×¶ÎÒѾ­¶ÔÊý¾Ý½øÐÐÁ˾ֲ¿µÄÅÅÐò£¬ReduceTaskÖ»Ðè±£Ö¤CopyµÄÊý¾ÝµÄ×îÖÕÕûÌåÓÐЧÐÔ¼´¿É¡£

¡¡¡¡ShuffleÖеĻº³åÇø´óС»áÓ°Ïìµ½mapreduce³ÌÐòµÄÖ´ÐÐЧÂÊ£¬Ô­ÔòÉÏ˵£¬»º³åÇøÔ½´ó£¬´ÅÅÌioµÄ´ÎÊýÔ½ÉÙ£¬Ö´ÐÐËٶȾÍÔ½¿ì

¡¡¡¡»º³åÇøµÄ´óС¿ÉÒÔͨ¹ý²ÎÊýµ÷Õû, ²ÎÊý£ºio.sort.mb ĬÈÏ100M



×÷ÕߣºÀÖÓã²¥¿Í´óÊý¾ÝÅàѵѧԺ
Ê×·¢£ºhttp://cloud.itcast.cn

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿