ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
HDFS дÒì³£·ÖÎö



Îĵµ°æ±¾¿ØÖÆ
 Îĵµ°æ±¾ºÅ   ÈÕÆÚ    ×÷Õß    ÉóºËÈË   ˵Ã÷
 V0.1          Áõ¾°Áú
Ŀ¼
1.     Ä¿µÄ.................................................................................................................................................. 3

2.     DFSClient ·ÖÎö ................................................................................................................................ 3

     2.1      pipeline ½¨Á¢........................................................................................................................... 6
     2.2      Êý¾Ý´«Êä ................................................................................................................................. 6
     2.3      close() ...................................................................................................................................... 8

3.     DataNode ·ÖÎö ............................................................................................................................... 8

     3.1      ´íÎó·ÖÎö ................................................................................................................................. 8
     3.2      ³ö´íµ÷²é TIPS ......................................................................................................................... 11

4.     ³£¼ûÈÕÖ¾ÒâÒå .............................................................................................. ´íÎó£¡Î´¶¨ÒåÊéÇ©¡£

     4.1      pipeline ½¨Á¢......................................................................................................................... 11
     4.2      Êý¾Ý´«Êä ............................................................................................................................... 11
1. Ä¿µÄ
   ±¾ÎĵµÒâÔÚÃ÷ȷдÁ÷³Ì¹ý³ÌÖвÙ×÷²½ÖèÒÔ¼°¸÷²½ÖпÉÄܳöÏÖµÄÒì³£¡£¸÷²½³öÏÖµÄÒì³£Çë
¼ûÎĵµÖеÄÁ÷³Ìͼ¡£
2. DFSClient ·ÖÎö




      DFSClient       DataStreamer     ResponseProcessor        Namenode      DataNode1            DataNode2                DataNode3

                  write()½«packetÈûµ½dataQueue
        0.´Ódata queueÖÐÈ¡³öpacket

                                         1. addBlock()



                                                  2. ½¨Á¢socketÁ¬½Ó



                                              3. ·¢ËÍWRITE_BLOCK±¨ÎÄ



                                                                                            4. new BlockReceiver

                                                                                     5. ½¨Á¢socketÁ¬½Ó

                                                                                  6. ·¢ËÍWRITE_BLOCK±¨ÎÄ

                                                                                                                     7. new BlockReceiver

                                                                                                             8. ½¨Á¢socketÁ¬½Ó

                                                                                                           9. ·¢ËÍWRITE_BLOCK±¨ÎÄ



                                                                                                                                            10. new BlockReceiver

                                                                                                           11. first bad link ack

                                                                                  12. first bad link ack

                                              13. first bad link ack



                            Æô¶¯ResponseProcessor



                                     ½«packet´ÓdataQueueÖÐÒÆ³ö£¬¼ÓÈëµ½ackQueue

                                              14. ÏòsocketÖÐдpacket

                                                                                  15. ÏòsocketÖÐдpacket

                                                                                                           16. ÏòsocketÖÐдpacket



                                                                                                                                            17. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ

                                                                                                              18. packet ack



                                                                                                                     19. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ

                                                                                      20. packet ack



                                                                                            21. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ

                                                             22. packet ack



                                     23. ÊÕµ½×îºóÒ»¸öpacketµÄack

                         stopµôResponseProcessorÏß³Ì                                                                                           closeµô´ò¿ªµÄÁ÷

                                                                                                                     closeµô´ò¿ªµÄÁ÷

                                     24. closeµôʹÓõÄÁ÷                                         closeµô´ò¿ªµÄÁ÷




           ÒÔÉÏΪ HDFS дÁ÷³Ìͼ:
 1.       Rpc µ÷Óà namenode µÄ addBlock() ·½·¨À´»ñµÃÐ嵀 block µÄ 3 ¸ö¸±±¾Î»Öá£
 2.       DFSClient ½¨Á¢µ½ primary datanode µÄ socket Á¬½Ó¡£
 3.       DFSClient Ïò primary datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£
4.   Primary datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏ󣬲¢´´½¨ block
        ºÍ meta Îļþ¡£
    5. primary datanode ½¨Á¢µ½µÚ¶þ¸ö datanode µÄ socket Á¬½Ó¡£
    6. primary datanode ÏòµÚ¶þ¸ö datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£
    7. µÚ¶þ¸ö datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏó¡£²¢´´½¨ block
        ºÍ meta Îļþ¡£
    8. µÚ¶þ¸ö datanode ½¨Á¢µ½×îºóÒ»¸ö datanode µÄ socket Á¬½Ó¡£
    9. µÚ¶þ¸ö datanode Ïò×îºóÒ»¸ö datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£
    10. ×îºóÒ»¸ö datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏó²¢´´½¨ block
        ºÍ meta Îļþ¡£
    11. ×îºóÒ»¸ö datanode ·µ»Ø ack ¸øµÚ¶þ¸ö datanode¡£
    12. µÚ¶þ¸ö datanode ·µ»Ø ack ¸ø primary datanode¡£
    13. primary datanode ·µ»Ø ack ¸ø DFSClient¡£
    14. DFSClient Ïò primary datanode д packet¡£
    15. primary datanode ÏòµÚ¶þ¸ö datanode д packet
    16. µÚ¶þ¸ö datanode Ïò×îºóÒ»¸ö datanode д packet¡£
    17. ×îºóÒ»¸ö datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£
    18. ×îºóÒ»¸ö datanode ·µ¸ø ack ¸øµÚ¶þ¸ö datanode¡£
    19. µÚ¶þ¸ö datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£
    20. µÚ¶þ¸ö datanode ·µ¸ø ack ¸ø primary datanode¡£
    21. primary datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£
    22. primary datanode ·µ¸ø ack ¸ø DFSClient¡£
×¢£º¶ÔÓÚ·Ç×îºó datanode À´½²£¬·¢Ë͹ý³ÌÖаÑÊý¾Ýдµ½±¾µØ´ÅÅÌ£¨block/meta£©Í¬ÏòÉÏÒ»¸ö
datanode ·¢ËÍ ack ²¢ÎÞ¾ø¶ÔÏȺó¹ØÏµ¡£datanode Öз¢ËÍÊý¾ÝºÍÊÕ ack ÊÇÔÚ BlockReceiver ºÍ
PacketResponser Õâ 2 ¸öÏß³ÌÖÐÍê³É¡£BlockReceiver ¸ºÔðÊÕµ½Êý¾Ý£¬·¢Ë͸øÏÂÒ»¸ö datanode£¬
²¢½«Êý¾Ýд±¾µØÎļþ¡£PacketResponser ¸ºÔðÊÕµ½ºóÒ»¸ö datanode µÄ ack£¬²¢½«¸Ã ack ת·¢¸ø
ÉÏÒ»¸ö datanode¡£µ±Ã»ÓÐÊý¾Ý´«Êäʱ£¬pipeline Öи÷ datanode ͨ¹ýÐÄÌø¶ÔÁ¬½Ó keepalive¡£
BlockReceiver Ï̴߳¦ÀíÊý¾Ý°´ÕÕÒÔÏÂ˳Ðò:
     1. ÊÕµ½ packet
     2. °Ñ packet д¸øÏÂÒ»¸ö datanode
     3. ½« packet flush µ½ datanode ±¾µØ block/meta Îļþ
     4. ½« packet ¼ÓÈëµ½ ack queue ÖÐ
×îºóÒ»¸ö datanode ºÍÆäËû datanode ÖÐµÄ PacketResponser Ïß³ÌÒÔ²»Í¬·½Ê½´¦Àí ack¡£
     ¶ÔÓÚ×îºóÒ»¸ö datanode ´¦Àí˳ÐòÈçÏ£º
         1£® ÏòÉÏÒ»¸ö datanode ·¢ËÍ heartbeat £¨heartbeat ¼ä¸ôΪ dfs.socket.timeout/2£¬ Ĭ
            ÈÏΪ 30s£©
         2£® µÈ´ý ack queue ÖжÔÓ¦ seq number
         3£® Èç¹ûÊÇ×îºóÒ»¸ö°ü£¬finalize block
         4£® ÏòÉÏÒ»¸ö datanode ·¢ËÍ ack

   ¶ÔÓÚÆäËû datanode ´¦Àí˳ÐòÈçÏ£º
     1. ÊÕµ½ÏÂÒ»¸ö datanode µÄ ack(¼´Ê¹ÊÕ²»µ½ÏÂÒ»¸ö datanode µÄ ack£¬Ò²»áÖ´ÐÐµÚ 2
        ²½)
     2. µÈ´ý ack queue ÖжÔÓ¦ seq number
3. ½« ack ·¢¸øÉÏÒ»¸ö datanode
PacketResponser Ï̵߳ĵڶþ²½µÈ BlockReceiver Ïß³ÌÖÐµÄµÚ 4 ²½Íê³É£¬²Å¿É¼ÌÐø½øÐÐÏÂ
Áв½Öè¡£
                                        NotReplicationYet
                                                             ÖØÊÔ£¬dfs.client.block.write.locateFollowBlock.retries,
                                                             ĬÈÏΪ5¡£ÖØÊÔ¼ä¸ô³õʼΪ400ms£¬ºóÒ»´ÎÊÇǰһ¸öµÄ2±¶
     Init()            addBlock()                            Rpcµ÷ÓÃnamenode addblockʱ£¬Èç¹û¸ÃÎļþµÄµ¹ÊýµÚ¶þ¸ö¿é
                                                             ¸±±¾Ð¡ÓÚ×îС¸±±¾Êý£¨dfs.replication.minÉèÖã¬Ä¬ÈÏΪ1£©
                                                             Ôò±¨NotReplicationYetException

                 DFSClient½¨Á¢µ½primary
                 datanodeµÄsocketÁ¬½Ó
                                                  ÖØÊÔ´ÎÊýͨ¹ýdfs.client.block.write.retriesÉèÖÃ,ĬÈÏΪ3´Î
                                                                                                   N




                                                                                                                 Pipeline½¨Á¢
                   DFSClientÏòprimary
              datanode·¢ËÍWRITE_BLOCK                                                ³öÏÖ´ËÒì³£µÄÔ­ÒòΪDFSC
                         ±¨ÎÄ                                                              lientµ½primary
                                                                                   datanodeÖ®¼äÍøÂç³öÏÖÎÊÌâ
                         primary
                   datanode·µ»Øack¸ø
  ³öÏÖÒì³£                 DFSClient



                        Close socket

                                          ÖØÊÔδ´ïµ½×î´óÖØÊÔ
                                              ´ÎÊý
                                                             AbandonBlock()
                        Success ?
                                                             ÖØÊÔ¼ä¸ô6s


                 ³É¹¦

                                                      ÖØÊÔ´ïµ½×î´óÖØÊÔ
                                                         ´ÎÊý
                    Æô¶¯Response
                    ProcessorÏß³Ì


                ½«packet´Ódataqueue
                 ÖÐÒÆ³ö£¬·Åµ½ack                                               Y
                     queueÖÐ
                                                                                                µ½primary
              DFSClient Ïòprimary                                                              datanodeµÄÁ¬
              datanode дpacket                                                                 ½ÓÊÇ·ñ´æÔÚ
                                                                                                                 Êý¾Ý´«Êä




                    ×îºóÒ»¸ö¿é£¿

                                    Y
                                                  ³öÏÖÒì³£                        processDataError()
                                                             ³öÏÖÒì³£
                            N
                                         дEOF



                      Socket flush()
                                                                     ³öÏÖÒì³£                    ³öÏÖ´ËÒì³£µÄÔ­ÒòΪ
                                                                                             DFSClientµ½primary
               Èç¹ûÊÇ×îºó¿éÔòcloseÁ÷                                                                  datanodeÖ®¼äÍøÂç
               £¬ºÍResponseProceessor                         end                                   ³öÏÖÎÊÌâ
                     Ïß³Ì


дµÄ¹ý³Ì¿ÉÒÔ·ÖΪ 3 ¸ö½×¶Î pipeline ½¨Á¢£¬Êý¾Ý´«Ê䣬close()¡£
2.1 pipeline ½¨Á¢
   (1) ÔÚpipeline½¨Á¢µÄ¹ý³ÌÖУ¬DFSClientÊ×ÏÈrpcµ÷ÓÃnamenodeµÄaddblock()£¬Ïònamenode
      ÉêÇëaddÒ»¸öblock£¬²¢·µ»Ø¸ÃblockµÄÈý¸ö¸±±¾µÄλÖá£Èç¹ûaddblock()ʧ°Ü£¬Ôò½øÐÐ
      ÖØÊÔ£¬ÖØÊÔ´ÎÊýΪdfs.client.block.write.locateFollowBlock.retries, ĬÈÏΪ5¡£ÖØÊÔ¼ä¸ô
      ³õʼΪ400ms£¬ºóÒ»´ÎÊÇǰһ´ÎµÄ2±¶¡£Èç¹ûÖØÊÔ´ïµ½×î´óÖØÊÔ´ÎÊý£¬ÔòÅ׳öÒì³££¬
      ½øÈë(3),Èç¹û³É¹¦£¬Ôò˳ÐòÖ´Ðв½Öè(2)¡£
   (2) Èç¹ûaddBlock()Õý³£·µ»Ø3¸ödatanodeλÖÃÐÅÏ¢£¬ÔòÖ´ÐÐÒÔϼ¸²½£º
       a) ½¨Á¢µ½primary datanodeµÄsocketÁ¬½Ó
       b) Ïòprimary datanode·¢ËÍWRITE_BLOCKÃüÁî
       c) µÈ´ýprimary datanodeµÄackÓ¦´ð
       Èç¹ûÒÔÉϸ÷²½ÖÐÓÐÒ»²½³ö´í£¬Ôò½øÈë²½Ö裨3£©¡£Èç¹ûÒÔÉÏ3²½¶¼³É¹¦£¬Ôòpipeline
       ½¨Á¢³É¹¦¡£
   (3) µ±(1), (2)ÖгöÏÖIOExceptionµÄʱºò£¬»á¶ªÆúµ±Ç°Block£¬½øÐÐÖØÊÔ£¬ÖØÐÂ
      addBlock()¡£¸ÃÖØÊÔ´ÎÊýͨ¹ýÖØÊÔ´ÎÊýͨ¹ýdfs.client.block.write.retriesÉèÖÃ,ĬÈÏΪ3
      ´Î
2.2 Êý¾Ý´«Êä
    DFSClient µÄÊý¾Ý·¢Ë͹ý³Ì±È½Ï¼òµ¥¡£            ¾ÍÊÇ DataStreamer Ïß³Ì´Ó data queue ÖÐÈ¡³ö packet£¬
½«Æä·ÅÈë ack queue£¬È»ºó½«¸Ã packet ·¢¸ø primary datanode¡£µ±Êý¾Ý´«Êä¹ý³ÌÖУ¬Èç¹û³öÏÖ
IOException ´íÎó£¬Ôò»á´¥·¢³ö´í´¦Àí»úÖÆ¡£³ö´í´¦Àí¼¯ÖÐÔÚ processDataError()½øÐС£
    ³ö´í´¦ÀíµÄ¹ý³ÌÈçÏ£º
    (1) ÓÉÓÚÐèÒªÊý¾ÝÖØ·¢£¬½« ack queue ÖÐ µÄ packet ÖØÐÂÈû»Øµ½ data queue ÖС£
    (2) ½«֮ǰ³ö´íµÄ datanode ÌÞ³ý¡£
    (3) °´ÕÕ host:port µÄ×ÖµäÐò½øÐÐÅÅÐò£¬½«×îСµÄ datanode ×÷ΪÐ嵀 primary datanode
    (4) ¶Ô primary datanode ½øÐÐ block recovery£¬Èç¹ûʧ°Ü£¬Ôòµ÷Óà processDataError()·µ»Ø£¬
        ÓÉÍâ²ãÑ­»·½øÐÐÖØÊÔ¡£
    (5) Èç¹û³É¹¦£¬Ôò½¨Á¢µ½ primary datanode µÄ socket Á¬½Ó¡£
    (6) Ïò primary datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£
    ÒÔÉϸ÷²½ÖгöÏÖ´íÎó£¬Ôò close µô socket Ö®ºó£¬º¯Êý·µ»Ø£¬ÓÐÍâ²ãÑ­»·½øÐÐÖØÊÔ¡£
    µ±Ò»´ÎÊý¾Ý´«Êä³öÏÖ´íÎóµÄʱºò£¬»áµ÷Óà processDataError() ³¢ÊÔ½øÐÐ block recovery¡£
¾ÙÀý£ºÎÒÃÇÓÐ 3 ¸ö¸±±¾·Ö±ðÔÚ 127.0.0.1, 127.0.0.2, 127.0.0.3 3 ¸ö datanode ÉÏ¡£

(1) ³õʼ״̬£¬node Áбí

               127.0.0.3   127.0.0.1   127.0.0.2
(2) 127.0.0.1 ³ö´í£¬½« 127.0.0.1 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔµÚÒ»
    ¸ö datanode Ϊ primary£¨¼´ 127.0.0.2 Ϊ primary£©
                                              £¬¶Ô 127.0.0.2 ÖØÊÔ 6 ´Î¡£

               127.0.0.2   127.0.0.3
(3) 127.0.0.2 ³ö´í£¬½« 127.0.0.2 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔµÚÒ»¸ö
    datanode Ϊ primary£¨¼´ 127.0.0.3 Ϊ primary£©
                                            £¬¶Ô 127.0.0.3 ÖØÊÔ 6 ´Î¡£
127.0.0.1      127.0.0.3
  (4) 127.0.0.1 ³ö´í£¬½« 127.0.0.1 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔ
  µÚÒ»¸ö datanode Ϊ primary£¨¼´ 127.0.0.3 Ϊ primary£©
                                              £¬¶Ô 127.0.0.3 ÖØÊÔ 6 ´Î¡£

             127.0.0.3


(5) 127.0.0.3 ³ö´í£¬node list Ϊ¿Õ¡£²»ÔÙ½øÐÐ block recovery¡£
    µ±Ò»¸ö block µÄÆäËû¸±±¾Îª 3 µÄʱºò£¬½øÐÐ block recovery ´ÎÊý£¬Ð¡ÓÚ 3 * 6 +1= 19 ´Î£¬
    Ôò block recovery ³É¹¦¡£Èç¹ûµÈÓÚ 19 ´Î£¬Ôò¸Ã block recovery ʧ°Ü¡£
                    processDataError()




                                                closeµôÁ÷




                                  °Ñack queueÖеÄpacket¼ÓÈëµ½data
                                            queueÖÐ



                                             Ìß³ö³ö´ídatanode



                                      ½«Ê£ÏµÄdatanode°´ÕÕhost
                                      :portµÄ×ÖµäÐòÅÅÐò£¬ÒÔ×î
                                         СµÄdn×÷Ϊprimary
                                             datanode


                                                ¶Ôprimary
                                              datanode½øÐÐ       ʧ°Ü    Return
                                              block recovery
                                                   ³É¹¦


                                        DFSClient½¨Á¢µ½primary
                                        datanodeµÄsocketÁ¬½Ó
                                                                ʧ°Ü


                                          DFSClientÏòprimary
                                     datanode·¢ËÍWRITE_BLOCK
   ³öÏÖ´ËÒì³£µÄÔ­ÒòΪDFS                                 ±¨ÎÄ
      Clientµ½primary
     datanodeÖ®¼äÍøÂç                                 primary
         ³öÏÖÎÊÌâ                                datanode·µ»Øack¸ø
                         throw IOException       DFSClient



                                               Close socket




                                               Success ?

                                                   ³É¹¦

                                              Æô¶¯Response
                                              ProcessorÏß³Ì
2.3 Close()
                                                                             ¸ÃÒì³£Ô­ÒòΪDFSClientµ½
                                                                             primary datanodeÍøÂçÁ¬½Ó
                                                                                     ³öÏÖÎÊÌâ



              ½«bufferÖеÄÊý¾Ý       flushBuffer()                        Throw IOEXception
               дÈëµ½socketÖÐ

                                                                                         ¸Ãº¯Êý½öµ±¸ÃDFSClientÒѾ­
                                                                                           ±»closeʱ£¬²Å»á±¨³ö
              ²»Í£µÄµÈ´ý£¬Ö±µ½
               ÊÕµ½È«²¿µÄack        flushInternal()

                                                Throw IOEXception
                                                                              Òì³£Í˳ö

        ¹Ø±ÕDataStreamerºÍ        closeThreads()             Throw IOEXception                    µ±DataStreamerºÍ
                                                                                           ResponseProcessorÏß³Ìjoin
      ResponserProccesorÏß³Ì                                                                 µÄʱºò£¬Èç¹û±»interrupt£¬
                                                                                                 Ôò»á±¨³ö¸ÃÒì³£



                                                                      Throw IOEXception
                              CloseÁ¬½ÓºÍ´ò¿ªµÄÁ÷
                                                                                                     CloseÁ¬½ÓÒì³£
                                                 Èç¹ûcomplete²»³É¹¦


                                                                           Throw IOEXception

                             Namenode.Complete()
                                                                    Complete²»³É¹¦£ºcomplete
                                                                     ·µ»Ø×´Ì¬ÎªSTILL_WAITING
                                                                         ³É¹¦£º·µ»Ø×´Ì¬
                                                                        COMPLETE_SUCCESS
                                                                    Òì³££ºÆäËû״̬£¬°üÀ¨°²È«Ä£
                                                                    ʽ£¬»òÕßдeditlog³öÏÖÒì³£


         ÉÏͼÃèÊöÁË DFSClient close() µÄ¹ý³Ì£¬²»ÄÑ·¢ÏÖ£¬µ± flushBuffer(), flushInternal(),
    closeThreads(), close Á¬½ÓÅ׳ö IOException ʱ£¬close ²Ù×÷Ö±½Ó½« IOException Å׳ö¡£¶ø
    Complete()²Ù×÷һֱæµÈ£¬Ö±µ½ complete ³É¹¦ÎªÖ¹£¬ÔÚ complete ²Ù×÷ÖУ¬namenode
    »á½«֮ǰ³ÖÓÐµÄ lease ÊÍ·Å¡£
         µ± close Òì³£Í˳öµÄʱºò£¬»áÓÐ 2 ÖÖ×ÊԴδ±» client ´¦Àí¡£
        a) Òì³£Í˳öʱ£¬ÍøÂçÁ¬½ÓδÄܼ°Ê± close £¨ÐèÒªÐÞ¸´¸Ã issue£©
        b) Òì³£Í˳öʱ£¬lease δÄÜÊÍ·Å¡£
            ÔÚ namenode ά»¤ 2 ¸ö lease limit¡£Soft limit ºÍ hard limit¡£
                 µ± lease ³¬¹ý soft limit£¨1 ·ÖÖÓ£©£¬ÁíÒ»¸ö DFSClient append ¸ÃÎļþʱ»á´¥
             ·¢ lease recovery£¬ÇҸôΠappend ʧ°Ü¡£µ«Ï´ÎÖØÊÔ append ¼´¿É³É¹¦¡£
                 µ± lease ³¬¹ý hard limit£¨1 Сʱ£© £¬Ôò namenode ´¥·¢ lease recovery£¬ÊÍ·Å
             ¸Ã lease¡£
3. DataNode ·ÖÎö
3.1 ´íÎó·ÖÎö
    Datanode µÄÐÐΪ·ÖΪ pipeline ½¨Á¢ºÍÊý¾Ý´«Êä 2 ²¿·Ö¡£Í¼ 3-1 ÖÐÃèÊöµÄÊÇ datanode ÔÚ½¨
Á¢ pipeline ¹ý³ÌÖеÄÁ÷³Ì¡£ÆäÖÐÒõÓ°¿é receive block() ΪÊý¾Ý´«ÊäÂß¼­£¬ÔÚͼ 3-2 ÖÐÏêϸÃè
Êö¡£
ÊÕµ½IOException£¬ÖØÊÔ



ÊÕµ½DFSClient£¨»òÉÏÒ»
¸ödatanode£©µÄconnect,                          ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½
      ½¨Á¢Á¬½Ó                                   ÉÏÒ»¸ödatanodeÍøÂç³öÏÖÒì
                                                     ³£




                                               ¼Ç¼ÈÕÖ¾£¬
 ÊÕµ½WRITE_BLOCKÃüÁî         Throw IOException                                  Òì³£Í˳ö
                                               ¹Ø±ÕÁ¬½Ó


New BlockReceiver¶ÔÏó                 Throw IOException                 ³ö´íÔ­Òò£ºdatanode±¾µØ²Ù
£¨´´½¨block/metaÎļþ£©                                                     ×÷»áµ¼ÖÂIOEXception£¬ÓпÉ
                                                                     ÄÜÊÇ´ÅÅÌIOѹÁ¦Ôì³É£¬ÐèÒªÏê
                                                                           ϸµ÷²é

    ½¨Á¢µ½ÏÂÒ»¸ö
                                             Close µôÁ¬½Ó
   datanodeµÄÁ¬½Ó
                      Throw IOException


ÏòÏÂÒ»¸ödatanode·¢ËÍ                                          ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½ÏÂÒ»
                                                          ¸ödatanodeÍøÂç³öÏÖÒì³£
 WRITE_BLOCKÃüÁî


µÈ´ýÏÂÒ»¸ödatanode·µ»Ø                                         Throw IOException
µÄfirst bad linkµÄack
                 ³É¹¦


                                                                        ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½
                    Ïòǰһ¸ö                                                ÉÏÒ»¸ödatanodeÍøÂç³öÏÖÒì
                                                                                ³£
                  datanode·¢ËÍ
                      ack


                      Receive
                       block

                                                                ²Î¼ûͼ3-2



                      success



        ͼ 3-1 datanode ÔÚ½¨Á¢ pipeline Á÷³Ì
1.Æô¶¯±Ê²¹³¦°ì±ð³Ù¸é±ð²õ±è´Ç²Ô»å
                                erÏß³Ì
                                                                                   ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­
                                                                                    ÒòÊÇÉÏÒ»¸ödatanodeµ½±¾
                                                                                    datanodeµÄÍøÂçÁ¬½ÓÒì³£
                            2.readNextPacke
                                   t
                                                                                      Èç¹ûÊÇ´ËÖÖÒì³££¬ÔòÐèÒª½øÒ»
                                                                                           ²½¶¨Î»

                           3.setBlockPosition

                                                                                            ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­
                                                                                             ÒòÊDZ¾datanodeµ½ÏÂÒ»¸ö
                                                                                             datanodeµÄÍøÂçÁ¬½ÓÒì³£
                            4.½«¶ÁÈëµÄpacketÊý
                             ¾ÝдÈëmirror out

                        5.Èç¹û¸ÃdatanodeΪpipelineÖÐ
                           ×îºóÒ»¸överifyChunks
            »¹ÓкóÐø°ü

                                                                             Ioexception
                              Finalized £¿

                                   N

                    Y       6.½«Êý¾Ýдµ½´ÅÅÌ¡£                        7.CheckData
                            °üÀ¨Ð´blockºÍmeta                      nodeError
                                                IOException

                                                                                           ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­
                                                                                           ÒòÊDZ¾datanodeµÄ´ÅÅÌÒì³£
                              8.½«Õû¸öpacket
                          flush¡£°üÀ¨blockºÍmeta




                        9.½«pkt·ÅÈëresponse¶ÓÁÐÖУ¬ÓÉ
                         PacketResponderÏ̷߳¢³öÓ¦´ð



                          10.Ïòmirror outдEOF        Throw IOException   12.cleanupBlock


                                                                        ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­
                        11.¹Ø±ÕPacketResponderÏß³Ì                           ÒòÊDZ¾datanodeµ½ÏÂÒ»¸ö
                                                                         datanodeµÄÍøÂçÁ¬½ÓÒì³£




                             ͼ 3-2 datanode ÔÚÊý¾Ý´«ÊäÁ÷³Ì
      ²»ÄÑ·¢ÏÖ£¬ÔÚ½¨Á¢ pipeline µÄ¹ý³ÌÖÐÓÐ 3 ÖÖÒì³£¡£
1) Datanode ×÷Ϊ socket server ʱ£¬ accept µ½ DFSClient À´µÄÇëÇóʱ£¬
                                ÔÚ                           Èç¹û³öÏÖÒì³££¬
ÔòºöÂÔÒì³££¬datanode ¼ÌÐø accept Á¬½Ó¡£
2) µ± datanode ÏòÏÂÒ»¸ö datanode ½¨Á¢Á¬½Ó£¬          ·¢ËÍ WRITE_BLOCK Ö¸Áî»òÕßÔÚ½ÓÊÜ first
bad link ack ʱ³öÏÖ´íÎóʱ£¬   datanode »á close µôͬÏÂÒ»¸ö datanode µÄÍøÂçÁ¬½Ó²¢ÏòÉÏÒ»
¸ö datanode£¨»òÕßÊÇ DFSClient£©·¢ËÍ ack ²¢ receive block ½ÓÊÜÊý¾Ý¡£
3) ÆäËûÇé¿ö³öÏÖ IOException ¶¼»áµ¼Ö¸øà DataXeceiver Ïß³ÌÒì³£Í˳ö¡£µ¼ÖÂÕâÖÖÒì
³£µÄÔ­ÒòÓжþ£º
      a) ͬÉÏÒ»¸ö datanode ½»»¥¡£°üÀ¨½ÓÊÕ WRITE_BLOCK ÃüÁîºÍÏòÉÏÒ»¸ö datanode
           ·¢ËÍ ack¡£´Ëʱ£¬¿ÉÄÜÊÇÓÉÓÚÉÏÒ»¸ö datanode µ½¸Ã datanode µÄÍøÂçÁ¬½Ó·±Ã¦¡£
           ¿É¼ì²éÊ·¢Ê±¿ÌÍøÂç×´¿ö¡£
b)    Create ±¾µØ block ºÍ meta Îļþ¡£
                                       ³öÏÖ´ËÀà´íÎóʱ£¬     ÓпÉÄÜÊÇÓÉÓÚ´´½¨±¾µØ block
              ºÍ meta Îļþʱ³ö´í£¬¾ßÌåÇé¿ö¿É¼ì²é datanode ÈÕÖ¾¡£
    ÒÔÉÏÎÊÌâµÄ¶¨Î»£¬¿Éͨ¹ýÈÕÖ¾Öдò³öµÄ stack ÐÅϢЭÖú¶¨Î»¡£
         Datanode ÖÐÊý¾Ý´«ÊäÔÚ receive block ÖÐÍê³É¡£¸÷²½ÍøÂç¼°´ÅÅ̲Ù×÷ÖнԿÉÄܳöÏÖ
    IOException¡£ÔÚ receive block ÖУ¬²¢ÎÞÖØÊÔ»úÖÆ¡£³öÏÖ´íÎó»áµ¼Ö DataXeceiver Ïß³ÌÒì
    ³£Í˳ö¡£Êý¾Ý´«Êä¹ý³ÌÖеÄÍøÂçºÍ´ÅÅÌ·±Ã¦½Ô»áµ¼Ö´ËÀà´íÎó¡£
3.2 ³ö´íµ÷²é tips
         µ±³öÏÖдÒ쳣ʱ£¬¿ÉÒÔͨ¹ý²é¿´Ð´´íÎóʱ¶ÔÓ¦µÄ meta ¼° block Îļþ¡£
         Èç¹ûÎļþÒѾ­´æÔÚ£¬ÇÒ²»Îª¿Õ£¬ÔòÒâζ×Å pipeline ÒѾ­½¨Á¢¡£´íÎó³öÏÖÔÚÊý¾Ý´«Êä
     ¹ý³ÌÖС£¿É¶ÔÕÕͼ 3-2 ЭÖúÎÊÌⶨλ¡£
         Èç¹û meta/block Îļþ²»´æÔÚ£¬       ÓпÉÄÜÊÇÓÉÓÚ datanode ÖØÆô£¬»òÕß new BlockReceiver
     ¶ÔÏó£¬Î´Äܳɹ¦£¬ÐèÒª½øÒ»²½¶¨Î»¡£
         Èç¹û meta/block ÎļþΪ¿Õ£¬Ôò¿ÉÖ¤Ã÷ new BlockReceiver ¶ÔÏó³É¹¦£¬¿É¼ì²éÏÂÒ»¸ö
     datanode ЭÖú¶¨Î»ÎÊÌâ¡£

4. ³£¼ûÈÕÖ¾ÒâÒå
4.1 pipeline ½¨Á¢
case1 £ºDFSClient Öб¨ warn ÈÕÖ¾ NotReplicatedYetException sleeping <·¾¶> retries left£¬

ÎÞ¸ÃÈÕÖ¾                                      addBlock ()Ò»´Î³É¹¦
СÓÚ 4 ´Î                                    addBlock()ͨ¹ýÖØÊԳɹ¦
µÈÓÚ 4 ´Îºó½ô¸ú warn ÈÕÖ¾ ¡±DataStreamer           addBlock() ʧ°Ü
Exception:¡±
µÈÓÚ 4 ´Îºó½ô¸ú warn ÈÕÖ¾ ¡±DataStreamer           addBlock() ÔÚ×îºóÒ»´ÎÖØÊԳɹ¦
Exception:¡±
´¦Àí·½Ê½£ºÈç¹û addBlock()ʧ°Ü£¬ÔòÐèÒª²é¿´µ±Ê± namenode µÄÈÕÖ¾¡£
Case 2£º ³öÏÖ info ÈÕÖ¾ ¡°Excluding node:¡±£¬ ºó½ô½Ó×Å ¡°Abandoning block¡± ´ú±í½¨Á¢ pipeline
ʱ³ö´í£¬½øÐÐ abandon block£¬È»ºóÖØÊÔ¡£
´¦Àí·½Ê½£ºÈç¹ûÖØÊÔ´ÎÊýСÓÚ 5£¬Ôò¿ÉºöÂÔ¡£
Case 3£º³öÏÖ info ÈÕÖ¾¡°Exception in createBlockOutputStream¡± ºóÓС°Bad connect ack with
firstBadLink¡± ´ú±í½¨Á¢ pipeline µÄʱºò£¬  ½ÓÊÕÈÕÖ¾ÖÐÖ¸¶¨µÄ datanode µÄ ack ʱ£¬    socket timeout¡£
´¦Àí·½Ê½£º¼ì²éÈÕÖ¾ÖÐÖ¸¶¨ datanode µÄ¸ºÔØ×´¿ö£¬ÓпÉÄÜÊÇÍøÂ緱æÔì³É¡£

4.2 Êý¾Ý´«Êä
Case 4£º³öÏÖwarnÈÕÖ¾"Error Recovery for block " + block + " failed " +
                    " because recovery from primary datanode " +
                    primaryNode + " failed " + recoveryErrorCount +
                    " times. " + " Pipeline was "
    ´ú±íÈÕÖ¾ÖÐÖ¸¶¨µÄ datanode ³öÏÖ block recovery ʧ°Ü
´¦Àí·½Ê½£º²é¿´Ö¸¶¨ datanode µÄÈÕÖ¾ºÍ¼à¿ØÓпÉÄÜÊÇÓÉÓÚµ±Ê±ÍøÂ緱æ»òÕß datanode ÆäËû
Ô­ÒòÔì³É³ö´í¡£µ±Îļþ¸±±¾Êýλ 3 ʱ£¬Error Recovery for block ³öÏÖ 19 ´Î£¬Ôò±íʾ¸Ã block
recovery ʧ°Ü¡£Ó¦²é¿´¶ÔÓ¦ datanode µÄÈÕÖ¾£¬ÒÔ½øÒ»²½¶¨Î»ÎÊÌâ¡£
Case 5: ³öÏÖ info ÈÕÖ¾¡°Exception in receiveBlock for block¡±ÈÕ־ʱ£¬ËµÃ÷ÊÇÊý¾Ý´«Êä¹ý³Ì
ÖгöÏÖÒì³£¡£ÐèÒª¸ù¾Ý¸ÃÈÕÖ¾Öб¨³öµÄ block id ºÍÒ쳣ջЭÖú¶¨Î»¡£

More Related Content

Viewers also liked (20)

PPT
CamTech 2
cmccutcheon17
?
PDF
Metrics, Pitfalls and Useful Metrics
Ajay Balamurugadas
?
PPTX
Nzas 2014
Fabiana Kubke
?
DOCX
Proyecto Incredibox
Vania C. Tovilla Quesada
?
PDF
CETS 2012, Susan Fisher, handout for Mobile Decisions: Ensuring the Solution ...
Chicago eLearning & Technology Showcase
?
PDF
????? ?40? Y??? : ????
2econsulting
?
PDF
BUSINESS LOAN CONTRACT MOU
MUSA Sir DR IR FEROZ
?
PDF
Role of Social Media in Education
Dr. Muhammad Iqbal
?
PDF
5Q Communications - Top 10 Tips for Effective Web Ministry
Five Q
?
PPTX
Moneda
Ever
?
PPTX
Unit 7 lesson d
Vanessavalencia
?
PPT
Callture turnkey platform presentation
Callture Inc
?
PDF
Case Study - France ICT Adoption Program for Small Businesses
Technopreneurs Association of Malaysia
?
PDF
Agri presentation 7th_sept2009
Prafulla Tekriwal
?
PPTX
Cets 2015 buteyn animation in e learning
Chicago eLearning & Technology Showcase
?
PPT
Linkedin Steps To Success
Katiebackagain
?
PDF
Development of the Logistics Sector in the United States: Past, Present and F...
Technopreneurs Association of Malaysia
?
PPTX
Demystifying and Monetizing the Cloud
Technopreneurs Association of Malaysia
?
PPTX
Insider¡¯s Briefing: Entertainment and Media Sector in Los Angeles
Technopreneurs Association of Malaysia
?
PPTX
±á»å´Ú²õÔ­Àí¼°ÊµÏÖ
baggioss
?
CamTech 2
cmccutcheon17
?
Metrics, Pitfalls and Useful Metrics
Ajay Balamurugadas
?
Nzas 2014
Fabiana Kubke
?
Proyecto Incredibox
Vania C. Tovilla Quesada
?
CETS 2012, Susan Fisher, handout for Mobile Decisions: Ensuring the Solution ...
Chicago eLearning & Technology Showcase
?
????? ?40? Y??? : ????
2econsulting
?
BUSINESS LOAN CONTRACT MOU
MUSA Sir DR IR FEROZ
?
Role of Social Media in Education
Dr. Muhammad Iqbal
?
5Q Communications - Top 10 Tips for Effective Web Ministry
Five Q
?
Moneda
Ever
?
Unit 7 lesson d
Vanessavalencia
?
Callture turnkey platform presentation
Callture Inc
?
Case Study - France ICT Adoption Program for Small Businesses
Technopreneurs Association of Malaysia
?
Agri presentation 7th_sept2009
Prafulla Tekriwal
?
Cets 2015 buteyn animation in e learning
Chicago eLearning & Technology Showcase
?
Linkedin Steps To Success
Katiebackagain
?
Development of the Logistics Sector in the United States: Past, Present and F...
Technopreneurs Association of Malaysia
?
Demystifying and Monetizing the Cloud
Technopreneurs Association of Malaysia
?
Insider¡¯s Briefing: Entertainment and Media Sector in Los Angeles
Technopreneurs Association of Malaysia
?
±á»å´Ú²õÔ­Àí¼°ÊµÏÖ
baggioss
?

Similar to ±á»å´Ú²õдÁ÷³ÌÒì³£´¦Àí (15)

PPT
¹¹½¨´¡³¦³Ù¾±´Ç²Ô³§³¦°ù¾±±è³ÙÓÎÏ··þÎñÆ÷£¬Ö§³Ö³¬¹ý15000²¢·¢Á¬½Ó
Renaun Erickson
?
PPT
¸ßÐÔÄܲ¢·¢°Â±ð²ú·þÎñÆ÷ʵÏÖºËÐÄÄÚÄ»
ideawu
?
PPTX
°Â±ð²ú²¢·¢Ä£ÐÍ´Ödz̽ÌÖ±¹3
ÀÖ·Ñ ºú
?
PDF
Python ÓÚ webgame µÄÓ¦ÓÃ
Ó弮 Àµ
?
PPTX
Unix socket
st900278
?
PPT
Java¼¼Êõ½²×ù ÍøÂç±à³Ì
xujie
?
PDF
Beanstalk
×ÚÖ¾ ³Â
?
PPT
Analysis on tcp ip protocol stack
Yueshen Xu
?
PDF
Jetty(version 8)ºËÐļܹ¹½âÎö
wavefly
?
PPT
¸ßÐÔÄܲ¢·¢ÍøÂç·þÎñÆ÷Éè¼ÆÓëʵÏÖ
ideawu
?
PPTX
¸ßÐÔÄܶÓÁйó±ç³Ü±ð³Ü±ðµÄÉè¼ÆºÍʹÓÃʵ¼ù
ËïÁ¢
?
PDF
¸é±è³¦Ô­ÀíÓëʵÏÖ
wavefly
?
PPT
Lysu's Java Socket notes
lysu
?
ODP
Static server½éÉÜ
sun jamie
?
PDF
High performance web server
ÑÒ ÏÄ
?
¹¹½¨´¡³¦³Ù¾±´Ç²Ô³§³¦°ù¾±±è³ÙÓÎÏ··þÎñÆ÷£¬Ö§³Ö³¬¹ý15000²¢·¢Á¬½Ó
Renaun Erickson
?
¸ßÐÔÄܲ¢·¢°Â±ð²ú·þÎñÆ÷ʵÏÖºËÐÄÄÚÄ»
ideawu
?
°Â±ð²ú²¢·¢Ä£ÐÍ´Ödz̽ÌÖ±¹3
ÀÖ·Ñ ºú
?
Python ÓÚ webgame µÄÓ¦ÓÃ
Ó弮 Àµ
?
Unix socket
st900278
?
Java¼¼Êõ½²×ù ÍøÂç±à³Ì
xujie
?
Beanstalk
×ÚÖ¾ ³Â
?
Analysis on tcp ip protocol stack
Yueshen Xu
?
Jetty(version 8)ºËÐļܹ¹½âÎö
wavefly
?
¸ßÐÔÄܲ¢·¢ÍøÂç·þÎñÆ÷Éè¼ÆÓëʵÏÖ
ideawu
?
¸ßÐÔÄܶÓÁйó±ç³Ü±ð³Ü±ðµÄÉè¼ÆºÍʹÓÃʵ¼ù
ËïÁ¢
?
¸é±è³¦Ô­ÀíÓëʵÏÖ
wavefly
?
Lysu's Java Socket notes
lysu
?
Static server½éÉÜ
sun jamie
?
High performance web server
ÑÒ ÏÄ
?
Ad

More from baggioss (10)

PDF
±á²ú²¹²õ±ðÐÔÄܲâÊÔÎĵµ
baggioss
?
PDF
±á²ú²¹²õ±ðʹÓó󲹻å´Ç´Ç±è·ÖÎö
baggioss
?
PDF
±á²¹»å´Ç´Ç±è»ùÏßÑ¡¶¨
baggioss
?
PPTX
Hic 2011 realtime_analytics_at_facebook
baggioss
?
PDF
[Hi c2011]building mission critical messaging system(guoqiang jerry)
baggioss
?
PDF
Hic2011
baggioss
?
PPT
Hdfs introduction
baggioss
?
PPT
Hbase
baggioss
?
PPTX
Hdfs
baggioss
?
PPTX
Hdfs
baggioss
?
±á²ú²¹²õ±ðÐÔÄܲâÊÔÎĵµ
baggioss
?
±á²ú²¹²õ±ðʹÓó󲹻å´Ç´Ç±è·ÖÎö
baggioss
?
±á²¹»å´Ç´Ç±è»ùÏßÑ¡¶¨
baggioss
?
Hic 2011 realtime_analytics_at_facebook
baggioss
?
[Hi c2011]building mission critical messaging system(guoqiang jerry)
baggioss
?
Hic2011
baggioss
?
Hdfs introduction
baggioss
?
Hbase
baggioss
?
Ad

±á»å´Ú²õдÁ÷³ÌÒì³£´¦Àí

  • 1. HDFS дÒì³£·ÖÎö Îĵµ°æ±¾¿ØÖÆ Îĵµ°æ±¾ºÅ ÈÕÆÚ ×÷Õß ÉóºËÈË ËµÃ÷ V0.1 Áõ¾°Áú
  • 2. Ŀ¼ 1. Ä¿µÄ.................................................................................................................................................. 3 2. DFSClient ·ÖÎö ................................................................................................................................ 3 2.1 pipeline ½¨Á¢........................................................................................................................... 6 2.2 Êý¾Ý´«Êä ................................................................................................................................. 6 2.3 close() ...................................................................................................................................... 8 3. DataNode ·ÖÎö ............................................................................................................................... 8 3.1 ´íÎó·ÖÎö ................................................................................................................................. 8 3.2 ³ö´íµ÷²é TIPS ......................................................................................................................... 11 4. ³£¼ûÈÕÖ¾ÒâÒå .............................................................................................. ´íÎó£¡Î´¶¨ÒåÊéÇ©¡£ 4.1 pipeline ½¨Á¢......................................................................................................................... 11 4.2 Êý¾Ý´«Êä ............................................................................................................................... 11
  • 3. 1. Ä¿µÄ ±¾ÎĵµÒâÔÚÃ÷ȷдÁ÷³Ì¹ý³ÌÖвÙ×÷²½ÖèÒÔ¼°¸÷²½ÖпÉÄܳöÏÖµÄÒì³£¡£¸÷²½³öÏÖµÄÒì³£Çë ¼ûÎĵµÖеÄÁ÷³Ìͼ¡£ 2. DFSClient ·ÖÎö DFSClient DataStreamer ResponseProcessor Namenode DataNode1 DataNode2 DataNode3 write()½«packetÈûµ½dataQueue 0.´Ódata queueÖÐÈ¡³öpacket 1. addBlock() 2. ½¨Á¢socketÁ¬½Ó 3. ·¢ËÍWRITE_BLOCK±¨ÎÄ 4. new BlockReceiver 5. ½¨Á¢socketÁ¬½Ó 6. ·¢ËÍWRITE_BLOCK±¨ÎÄ 7. new BlockReceiver 8. ½¨Á¢socketÁ¬½Ó 9. ·¢ËÍWRITE_BLOCK±¨ÎÄ 10. new BlockReceiver 11. first bad link ack 12. first bad link ack 13. first bad link ack Æô¶¯ResponseProcessor ½«packet´ÓdataQueueÖÐÒÆ³ö£¬¼ÓÈëµ½ackQueue 14. ÏòsocketÖÐдpacket 15. ÏòsocketÖÐдpacket 16. ÏòsocketÖÐдpacket 17. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ 18. packet ack 19. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ 20. packet ack 21. ½ÓÊÕpacket£¬flushµ½±¾µØ´ÅÅÌ 22. packet ack 23. ÊÕµ½×îºóÒ»¸öpacketµÄack stopµôResponseProcessorÏß³Ì closeµô´ò¿ªµÄÁ÷ closeµô´ò¿ªµÄÁ÷ 24. closeµôʹÓõÄÁ÷ closeµô´ò¿ªµÄÁ÷ ÒÔÉÏΪ HDFS дÁ÷³Ìͼ: 1. Rpc µ÷Óà namenode µÄ addBlock() ·½·¨À´»ñµÃÐ嵀 block µÄ 3 ¸ö¸±±¾Î»Öᣠ2. DFSClient ½¨Á¢µ½ primary datanode µÄ socket Á¬½Ó¡£ 3. DFSClient Ïò primary datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£
  • 4. 4. Primary datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏ󣬲¢´´½¨ block ºÍ meta Îļþ¡£ 5. primary datanode ½¨Á¢µ½µÚ¶þ¸ö datanode µÄ socket Á¬½Ó¡£ 6. primary datanode ÏòµÚ¶þ¸ö datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£ 7. µÚ¶þ¸ö datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏó¡£²¢´´½¨ block ºÍ meta Îļþ¡£ 8. µÚ¶þ¸ö datanode ½¨Á¢µ½×îºóÒ»¸ö datanode µÄ socket Á¬½Ó¡£ 9. µÚ¶þ¸ö datanode Ïò×îºóÒ»¸ö datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£ 10. ×îºóÒ»¸ö datanode ÊÕµ½ WRITE_BLOCK ±¨Îĺó£¬new BlockReceiver ¶ÔÏó²¢´´½¨ block ºÍ meta Îļþ¡£ 11. ×îºóÒ»¸ö datanode ·µ»Ø ack ¸øµÚ¶þ¸ö datanode¡£ 12. µÚ¶þ¸ö datanode ·µ»Ø ack ¸ø primary datanode¡£ 13. primary datanode ·µ»Ø ack ¸ø DFSClient¡£ 14. DFSClient Ïò primary datanode д packet¡£ 15. primary datanode ÏòµÚ¶þ¸ö datanode д packet 16. µÚ¶þ¸ö datanode Ïò×îºóÒ»¸ö datanode д packet¡£ 17. ×îºóÒ»¸ö datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£ 18. ×îºóÒ»¸ö datanode ·µ¸ø ack ¸øµÚ¶þ¸ö datanode¡£ 19. µÚ¶þ¸ö datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£ 20. µÚ¶þ¸ö datanode ·µ¸ø ack ¸ø primary datanode¡£ 21. primary datanode д¸Ã packet Êý¾Ýµ½ block/meta Îļþ¡£ 22. primary datanode ·µ¸ø ack ¸ø DFSClient¡£ ×¢£º¶ÔÓÚ·Ç×îºó datanode À´½²£¬·¢Ë͹ý³ÌÖаÑÊý¾Ýдµ½±¾µØ´ÅÅÌ£¨block/meta£©Í¬ÏòÉÏÒ»¸ö datanode ·¢ËÍ ack ²¢ÎÞ¾ø¶ÔÏȺó¹ØÏµ¡£datanode Öз¢ËÍÊý¾ÝºÍÊÕ ack ÊÇÔÚ BlockReceiver ºÍ PacketResponser Õâ 2 ¸öÏß³ÌÖÐÍê³É¡£BlockReceiver ¸ºÔðÊÕµ½Êý¾Ý£¬·¢Ë͸øÏÂÒ»¸ö datanode£¬ ²¢½«Êý¾Ýд±¾µØÎļþ¡£PacketResponser ¸ºÔðÊÕµ½ºóÒ»¸ö datanode µÄ ack£¬²¢½«¸Ã ack ת·¢¸ø ÉÏÒ»¸ö datanode¡£µ±Ã»ÓÐÊý¾Ý´«Êäʱ£¬pipeline Öи÷ datanode ͨ¹ýÐÄÌø¶ÔÁ¬½Ó keepalive¡£ BlockReceiver Ï̴߳¦ÀíÊý¾Ý°´ÕÕÒÔÏÂ˳Ðò: 1. ÊÕµ½ packet 2. °Ñ packet д¸øÏÂÒ»¸ö datanode 3. ½« packet flush µ½ datanode ±¾µØ block/meta Îļþ 4. ½« packet ¼ÓÈëµ½ ack queue ÖÐ ×îºóÒ»¸ö datanode ºÍÆäËû datanode ÖÐµÄ PacketResponser Ïß³ÌÒÔ²»Í¬·½Ê½´¦Àí ack¡£ ¶ÔÓÚ×îºóÒ»¸ö datanode ´¦Àí˳ÐòÈçÏ£º 1£® ÏòÉÏÒ»¸ö datanode ·¢ËÍ heartbeat £¨heartbeat ¼ä¸ôΪ dfs.socket.timeout/2£¬ Ĭ ÈÏΪ 30s£© 2£® µÈ´ý ack queue ÖжÔÓ¦ seq number 3£® Èç¹ûÊÇ×îºóÒ»¸ö°ü£¬finalize block 4£® ÏòÉÏÒ»¸ö datanode ·¢ËÍ ack ¶ÔÓÚÆäËû datanode ´¦Àí˳ÐòÈçÏ£º 1. ÊÕµ½ÏÂÒ»¸ö datanode µÄ ack(¼´Ê¹ÊÕ²»µ½ÏÂÒ»¸ö datanode µÄ ack£¬Ò²»áÖ´ÐÐµÚ 2 ²½) 2. µÈ´ý ack queue ÖжÔÓ¦ seq number
  • 5. 3. ½« ack ·¢¸øÉÏÒ»¸ö datanode PacketResponser Ï̵߳ĵڶþ²½µÈ BlockReceiver Ïß³ÌÖÐµÄµÚ 4 ²½Íê³É£¬²Å¿É¼ÌÐø½øÐÐÏ Áв½Öè¡£ NotReplicationYet ÖØÊÔ£¬dfs.client.block.write.locateFollowBlock.retries, ĬÈÏΪ5¡£ÖØÊÔ¼ä¸ô³õʼΪ400ms£¬ºóÒ»´ÎÊÇǰһ¸öµÄ2±¶ Init() addBlock() Rpcµ÷ÓÃnamenode addblockʱ£¬Èç¹û¸ÃÎļþµÄµ¹ÊýµÚ¶þ¸ö¿é ¸±±¾Ð¡ÓÚ×îС¸±±¾Êý£¨dfs.replication.minÉèÖã¬Ä¬ÈÏΪ1£© Ôò±¨NotReplicationYetException DFSClient½¨Á¢µ½primary datanodeµÄsocketÁ¬½Ó ÖØÊÔ´ÎÊýͨ¹ýdfs.client.block.write.retriesÉèÖÃ,ĬÈÏΪ3´Î N Pipeline½¨Á¢ DFSClientÏòprimary datanode·¢ËÍWRITE_BLOCK ³öÏÖ´ËÒì³£µÄÔ­ÒòΪDFSC ±¨ÎÄ lientµ½primary datanodeÖ®¼äÍøÂç³öÏÖÎÊÌâ primary datanode·µ»Øack¸ø ³öÏÖÒì³£ DFSClient Close socket ÖØÊÔδ´ïµ½×î´óÖØÊÔ ´ÎÊý AbandonBlock() Success ? ÖØÊÔ¼ä¸ô6s ³É¹¦ ÖØÊÔ´ïµ½×î´óÖØÊÔ ´ÎÊý Æô¶¯Response ProcessorÏß³Ì ½«packet´Ódataqueue ÖÐÒÆ³ö£¬·Åµ½ack Y queueÖÐ µ½primary DFSClient Ïòprimary datanodeµÄÁ¬ datanode дpacket ½ÓÊÇ·ñ´æÔÚ Êý¾Ý´«Êä ×îºóÒ»¸ö¿é£¿ Y ³öÏÖÒì³£ processDataError() ³öÏÖÒì³£ N дEOF Socket flush() ³öÏÖÒì³£ ³öÏÖ´ËÒì³£µÄÔ­ÒòΪ DFSClientµ½primary Èç¹ûÊÇ×îºó¿éÔòcloseÁ÷ datanodeÖ®¼äÍøÂç £¬ºÍResponseProceessor end ³öÏÖÎÊÌâ Ïß³Ì Ð´µÄ¹ý³Ì¿ÉÒÔ·ÖΪ 3 ¸ö½×¶Î pipeline ½¨Á¢£¬Êý¾Ý´«Ê䣬close()¡£
  • 6. 2.1 pipeline ½¨Á¢ (1) ÔÚpipeline½¨Á¢µÄ¹ý³ÌÖУ¬DFSClientÊ×ÏÈrpcµ÷ÓÃnamenodeµÄaddblock()£¬Ïònamenode ÉêÇëaddÒ»¸öblock£¬²¢·µ»Ø¸ÃblockµÄÈý¸ö¸±±¾µÄλÖá£Èç¹ûaddblock()ʧ°Ü£¬Ôò½øÐÐ ÖØÊÔ£¬ÖØÊÔ´ÎÊýΪdfs.client.block.write.locateFollowBlock.retries, ĬÈÏΪ5¡£ÖØÊÔ¼ä¸ô ³õʼΪ400ms£¬ºóÒ»´ÎÊÇǰһ´ÎµÄ2±¶¡£Èç¹ûÖØÊÔ´ïµ½×î´óÖØÊÔ´ÎÊý£¬ÔòÅ׳öÒì³££¬ ½øÈë(3),Èç¹û³É¹¦£¬Ôò˳ÐòÖ´Ðв½Öè(2)¡£ (2) Èç¹ûaddBlock()Õý³£·µ»Ø3¸ödatanodeλÖÃÐÅÏ¢£¬ÔòÖ´ÐÐÒÔϼ¸²½£º a) ½¨Á¢µ½primary datanodeµÄsocketÁ¬½Ó b) Ïòprimary datanode·¢ËÍWRITE_BLOCKÃüÁî c) µÈ´ýprimary datanodeµÄackÓ¦´ð Èç¹ûÒÔÉϸ÷²½ÖÐÓÐÒ»²½³ö´í£¬Ôò½øÈë²½Ö裨3£©¡£Èç¹ûÒÔÉÏ3²½¶¼³É¹¦£¬Ôòpipeline ½¨Á¢³É¹¦¡£ (3) µ±(1), (2)ÖгöÏÖIOExceptionµÄʱºò£¬»á¶ªÆúµ±Ç°Block£¬½øÐÐÖØÊÔ£¬ÖØÐ addBlock()¡£¸ÃÖØÊÔ´ÎÊýͨ¹ýÖØÊÔ´ÎÊýͨ¹ýdfs.client.block.write.retriesÉèÖÃ,ĬÈÏΪ3 ´Î 2.2 Êý¾Ý´«Êä DFSClient µÄÊý¾Ý·¢Ë͹ý³Ì±È½Ï¼òµ¥¡£ ¾ÍÊÇ DataStreamer Ïß³Ì´Ó data queue ÖÐÈ¡³ö packet£¬ ½«Æä·ÅÈë ack queue£¬È»ºó½«¸Ã packet ·¢¸ø primary datanode¡£µ±Êý¾Ý´«Êä¹ý³ÌÖУ¬Èç¹û³öÏÖ IOException ´íÎó£¬Ôò»á´¥·¢³ö´í´¦Àí»úÖÆ¡£³ö´í´¦Àí¼¯ÖÐÔÚ processDataError()½øÐС£ ³ö´í´¦ÀíµÄ¹ý³ÌÈçÏ£º (1) ÓÉÓÚÐèÒªÊý¾ÝÖØ·¢£¬½« ack queue ÖÐ µÄ packet ÖØÐÂÈû»Øµ½ data queue ÖС£ (2) ½«֮ǰ³ö´íµÄ datanode ÌÞ³ý¡£ (3) °´ÕÕ host:port µÄ×ÖµäÐò½øÐÐÅÅÐò£¬½«×îСµÄ datanode ×÷ΪÐ嵀 primary datanode (4) ¶Ô primary datanode ½øÐÐ block recovery£¬Èç¹ûʧ°Ü£¬Ôòµ÷Óà processDataError()·µ»Ø£¬ ÓÉÍâ²ãÑ­»·½øÐÐÖØÊÔ¡£ (5) Èç¹û³É¹¦£¬Ôò½¨Á¢µ½ primary datanode µÄ socket Á¬½Ó¡£ (6) Ïò primary datanode ·¢ËÍ WRITE_BLOCK ±¨ÎÄ¡£ ÒÔÉϸ÷²½ÖгöÏÖ´íÎó£¬Ôò close µô socket Ö®ºó£¬º¯Êý·µ»Ø£¬ÓÐÍâ²ãÑ­»·½øÐÐÖØÊÔ¡£ µ±Ò»´ÎÊý¾Ý´«Êä³öÏÖ´íÎóµÄʱºò£¬»áµ÷Óà processDataError() ³¢ÊÔ½øÐÐ block recovery¡£ ¾ÙÀý£ºÎÒÃÇÓÐ 3 ¸ö¸±±¾·Ö±ðÔÚ 127.0.0.1, 127.0.0.2, 127.0.0.3 3 ¸ö datanode ÉÏ¡£ (1) ³õʼ״̬£¬node Áбí 127.0.0.3 127.0.0.1 127.0.0.2 (2) 127.0.0.1 ³ö´í£¬½« 127.0.0.1 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔµÚÒ» ¸ö datanode Ϊ primary£¨¼´ 127.0.0.2 Ϊ primary£© £¬¶Ô 127.0.0.2 ÖØÊÔ 6 ´Î¡£ 127.0.0.2 127.0.0.3 (3) 127.0.0.2 ³ö´í£¬½« 127.0.0.2 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔµÚÒ»¸ö datanode Ϊ primary£¨¼´ 127.0.0.3 Ϊ primary£© £¬¶Ô 127.0.0.3 ÖØÊÔ 6 ´Î¡£
  • 7. 127.0.0.1 127.0.0.3 (4) 127.0.0.1 ³ö´í£¬½« 127.0.0.1 Ìß³ö£¬ÆäÓà datanode °´ÕÕ hostname:port ÅÅÐò£¬²¢ÒÔ µÚÒ»¸ö datanode Ϊ primary£¨¼´ 127.0.0.3 Ϊ primary£© £¬¶Ô 127.0.0.3 ÖØÊÔ 6 ´Î¡£ 127.0.0.3 (5) 127.0.0.3 ³ö´í£¬node list Ϊ¿Õ¡£²»ÔÙ½øÐÐ block recovery¡£ µ±Ò»¸ö block µÄÆäËû¸±±¾Îª 3 µÄʱºò£¬½øÐÐ block recovery ´ÎÊý£¬Ð¡ÓÚ 3 * 6 +1= 19 ´Î£¬ Ôò block recovery ³É¹¦¡£Èç¹ûµÈÓÚ 19 ´Î£¬Ôò¸Ã block recovery ʧ°Ü¡£ processDataError() closeµôÁ÷ °Ñack queueÖеÄpacket¼ÓÈëµ½data queueÖÐ Ìß³ö³ö´ídatanode ½«Ê£ÏµÄdatanode°´ÕÕhost :portµÄ×ÖµäÐòÅÅÐò£¬ÒÔ×î СµÄdn×÷Ϊprimary datanode ¶Ôprimary datanode½øÐРʧ°Ü Return block recovery ³É¹¦ DFSClient½¨Á¢µ½primary datanodeµÄsocketÁ¬½Ó ʧ°Ü DFSClientÏòprimary datanode·¢ËÍWRITE_BLOCK ³öÏÖ´ËÒì³£µÄÔ­ÒòΪDFS ±¨ÎÄ Clientµ½primary datanodeÖ®¼äÍøÂç primary ³öÏÖÎÊÌâ datanode·µ»Øack¸ø throw IOException DFSClient Close socket Success ? ³É¹¦ Æô¶¯Response ProcessorÏß³Ì
  • 8. 2.3 Close() ¸ÃÒì³£Ô­ÒòΪDFSClientµ½ primary datanodeÍøÂçÁ¬½Ó ³öÏÖÎÊÌâ ½«bufferÖеÄÊý¾Ý flushBuffer() Throw IOEXception дÈëµ½socketÖÐ ¸Ãº¯Êý½öµ±¸ÃDFSClientÒѾ­ ±»closeʱ£¬²Å»á±¨³ö ²»Í£µÄµÈ´ý£¬Ö±µ½ ÊÕµ½È«²¿µÄack flushInternal() Throw IOEXception Òì³£Í˳ö ¹Ø±ÕDataStreamerºÍ closeThreads() Throw IOEXception µ±DataStreamerºÍ ResponseProcessorÏß³Ìjoin ResponserProccesorÏß³Ì µÄʱºò£¬Èç¹û±»interrupt£¬ Ôò»á±¨³ö¸ÃÒì³£ Throw IOEXception CloseÁ¬½ÓºÍ´ò¿ªµÄÁ÷ CloseÁ¬½ÓÒì³£ Èç¹ûcomplete²»³É¹¦ Throw IOEXception Namenode.Complete() Complete²»³É¹¦£ºcomplete ·µ»Ø×´Ì¬ÎªSTILL_WAITING ³É¹¦£º·µ»Ø×´Ì¬ COMPLETE_SUCCESS Òì³££ºÆäËû״̬£¬°üÀ¨°²È«Ä£ ʽ£¬»òÕßдeditlog³öÏÖÒì³£ ÉÏͼÃèÊöÁË DFSClient close() µÄ¹ý³Ì£¬²»ÄÑ·¢ÏÖ£¬µ± flushBuffer(), flushInternal(), closeThreads(), close Á¬½ÓÅ׳ö IOException ʱ£¬close ²Ù×÷Ö±½Ó½« IOException Å׳ö¡£¶ø Complete()²Ù×÷һֱæµÈ£¬Ö±µ½ complete ³É¹¦ÎªÖ¹£¬ÔÚ complete ²Ù×÷ÖУ¬namenode »á½«֮ǰ³ÖÓÐµÄ lease ÊÍ·Å¡£ µ± close Òì³£Í˳öµÄʱºò£¬»áÓÐ 2 ÖÖ×ÊԴδ±» client ´¦Àí¡£ a) Òì³£Í˳öʱ£¬ÍøÂçÁ¬½ÓδÄܼ°Ê± close £¨ÐèÒªÐÞ¸´¸Ã issue£© b) Òì³£Í˳öʱ£¬lease δÄÜÊÍ·Å¡£ ÔÚ namenode ά»¤ 2 ¸ö lease limit¡£Soft limit ºÍ hard limit¡£ µ± lease ³¬¹ý soft limit£¨1 ·ÖÖÓ£©£¬ÁíÒ»¸ö DFSClient append ¸ÃÎļþʱ»á´¥ ·¢ lease recovery£¬ÇҸôΠappend ʧ°Ü¡£µ«Ï´ÎÖØÊÔ append ¼´¿É³É¹¦¡£ µ± lease ³¬¹ý hard limit£¨1 Сʱ£© £¬Ôò namenode ´¥·¢ lease recovery£¬ÊÍ·Å ¸Ã lease¡£ 3. DataNode ·ÖÎö 3.1 ´íÎó·ÖÎö Datanode µÄÐÐΪ·ÖΪ pipeline ½¨Á¢ºÍÊý¾Ý´«Êä 2 ²¿·Ö¡£Í¼ 3-1 ÖÐÃèÊöµÄÊÇ datanode ÔÚ½¨ Á¢ pipeline ¹ý³ÌÖеÄÁ÷³Ì¡£ÆäÖÐÒõÓ°¿é receive block() ΪÊý¾Ý´«ÊäÂß¼­£¬ÔÚͼ 3-2 ÖÐÏêϸÃè Êö¡£
  • 9. ÊÕµ½IOException£¬ÖØÊÔ ÊÕµ½DFSClient£¨»òÉÏÒ» ¸ödatanode£©µÄconnect, ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½ ½¨Á¢Á¬½Ó ÉÏÒ»¸ödatanodeÍøÂç³öÏÖÒì ³£ ¼Ç¼ÈÕÖ¾£¬ ÊÕµ½WRITE_BLOCKÃüÁî Throw IOException Òì³£Í˳ö ¹Ø±ÕÁ¬½Ó New BlockReceiver¶ÔÏó Throw IOException ³ö´íÔ­Òò£ºdatanode±¾µØ²Ù £¨´´½¨block/metaÎļþ£© ×÷»áµ¼ÖÂIOEXception£¬ÓÐ¿É ÄÜÊÇ´ÅÅÌIOѹÁ¦Ôì³É£¬ÐèÒªÏê ϸµ÷²é ½¨Á¢µ½ÏÂÒ»¸ö Close µôÁ¬½Ó datanodeµÄÁ¬½Ó Throw IOException ÏòÏÂÒ»¸ödatanode·¢ËÍ ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½ÏÂÒ» ¸ödatanodeÍøÂç³öÏÖÒì³£ WRITE_BLOCKÃüÁî µÈ´ýÏÂÒ»¸ödatanode·µ»Ø Throw IOException µÄfirst bad linkµÄack ³É¹¦ ³ö´íÔ­Òò£ºµ±Ç°datanodeµ½ Ïòǰһ¸ö ÉÏÒ»¸ödatanodeÍøÂç³öÏÖÒì ³£ datanode·¢ËÍ ack Receive block ²Î¼ûͼ3-2 success ͼ 3-1 datanode ÔÚ½¨Á¢ pipeline Á÷³Ì
  • 10. 1.Æô¶¯±Ê²¹³¦°ì±ð³Ù¸é±ð²õ±è´Ç²Ô»å erÏß³Ì ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­ ÒòÊÇÉÏÒ»¸ödatanodeµ½±¾ datanodeµÄÍøÂçÁ¬½ÓÒì³£ 2.readNextPacke t Èç¹ûÊÇ´ËÖÖÒì³££¬ÔòÐèÒª½øÒ» ²½¶¨Î» 3.setBlockPosition ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­ ÒòÊDZ¾datanodeµ½ÏÂÒ»¸ö datanodeµÄÍøÂçÁ¬½ÓÒì³£ 4.½«¶ÁÈëµÄpacketÊý ¾ÝдÈëmirror out 5.Èç¹û¸ÃdatanodeΪpipelineÖÐ ×îºóÒ»¸överifyChunks »¹ÓкóÐø°ü Ioexception Finalized £¿ N Y 6.½«Êý¾Ýдµ½´ÅÅÌ¡£ 7.CheckData °üÀ¨Ð´blockºÍmeta nodeError IOException ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­ ÒòÊDZ¾datanodeµÄ´ÅÅÌÒì³£ 8.½«Õû¸öpacket flush¡£°üÀ¨blockºÍmeta 9.½«pkt·ÅÈëresponse¶ÓÁÐÖУ¬ÓÉ PacketResponderÏ̷߳¢³öÓ¦´ð 10.Ïòmirror outдEOF Throw IOException 12.cleanupBlock ¸Ãº¯Êý³öÏÖIOExceptionµÄÔ­ 11.¹Ø±ÕPacketResponderÏß³Ì ÒòÊDZ¾datanodeµ½ÏÂÒ»¸ö datanodeµÄÍøÂçÁ¬½ÓÒì³£ ͼ 3-2 datanode ÔÚÊý¾Ý´«ÊäÁ÷³Ì ²»ÄÑ·¢ÏÖ£¬ÔÚ½¨Á¢ pipeline µÄ¹ý³ÌÖÐÓÐ 3 ÖÖÒì³£¡£ 1) Datanode ×÷Ϊ socket server ʱ£¬ accept µ½ DFSClient À´µÄÇëÇóʱ£¬ ÔÚ Èç¹û³öÏÖÒì³££¬ ÔòºöÂÔÒì³££¬datanode ¼ÌÐø accept Á¬½Ó¡£ 2) µ± datanode ÏòÏÂÒ»¸ö datanode ½¨Á¢Á¬½Ó£¬ ·¢ËÍ WRITE_BLOCK Ö¸Áî»òÕßÔÚ½ÓÊÜ first bad link ack ʱ³öÏÖ´íÎóʱ£¬ datanode »á close µôͬÏÂÒ»¸ö datanode µÄÍøÂçÁ¬½Ó²¢ÏòÉÏÒ» ¸ö datanode£¨»òÕßÊÇ DFSClient£©·¢ËÍ ack ²¢ receive block ½ÓÊÜÊý¾Ý¡£ 3) ÆäËûÇé¿ö³öÏÖ IOException ¶¼»áµ¼Ö¸øà DataXeceiver Ïß³ÌÒì³£Í˳ö¡£µ¼ÖÂÕâÖÖÒì ³£µÄÔ­ÒòÓжþ£º a) ͬÉÏÒ»¸ö datanode ½»»¥¡£°üÀ¨½ÓÊÕ WRITE_BLOCK ÃüÁîºÍÏòÉÏÒ»¸ö datanode ·¢ËÍ ack¡£´Ëʱ£¬¿ÉÄÜÊÇÓÉÓÚÉÏÒ»¸ö datanode µ½¸Ã datanode µÄÍøÂçÁ¬½Ó·±Ã¦¡£ ¿É¼ì²éÊ·¢Ê±¿ÌÍøÂç×´¿ö¡£
  • 11. b) Create ±¾µØ block ºÍ meta Îļþ¡£ ³öÏÖ´ËÀà´íÎóʱ£¬ ÓпÉÄÜÊÇÓÉÓÚ´´½¨±¾µØ block ºÍ meta Îļþʱ³ö´í£¬¾ßÌåÇé¿ö¿É¼ì²é datanode ÈÕÖ¾¡£ ÒÔÉÏÎÊÌâµÄ¶¨Î»£¬¿Éͨ¹ýÈÕÖ¾Öдò³öµÄ stack ÐÅϢЭÖú¶¨Î»¡£ Datanode ÖÐÊý¾Ý´«ÊäÔÚ receive block ÖÐÍê³É¡£¸÷²½ÍøÂç¼°´ÅÅ̲Ù×÷ÖнԿÉÄܳöÏÖ IOException¡£ÔÚ receive block ÖУ¬²¢ÎÞÖØÊÔ»úÖÆ¡£³öÏÖ´íÎó»áµ¼Ö DataXeceiver Ïß³ÌÒì ³£Í˳ö¡£Êý¾Ý´«Êä¹ý³ÌÖеÄÍøÂçºÍ´ÅÅÌ·±Ã¦½Ô»áµ¼Ö´ËÀà´íÎó¡£ 3.2 ³ö´íµ÷²é tips µ±³öÏÖдÒ쳣ʱ£¬¿ÉÒÔͨ¹ý²é¿´Ð´´íÎóʱ¶ÔÓ¦µÄ meta ¼° block Îļþ¡£ Èç¹ûÎļþÒѾ­´æÔÚ£¬ÇÒ²»Îª¿Õ£¬ÔòÒâζ×Å pipeline ÒѾ­½¨Á¢¡£´íÎó³öÏÖÔÚÊý¾Ý´«Êä ¹ý³ÌÖС£¿É¶ÔÕÕͼ 3-2 ЭÖúÎÊÌⶨλ¡£ Èç¹û meta/block Îļþ²»´æÔÚ£¬ ÓпÉÄÜÊÇÓÉÓÚ datanode ÖØÆô£¬»òÕß new BlockReceiver ¶ÔÏó£¬Î´Äܳɹ¦£¬ÐèÒª½øÒ»²½¶¨Î»¡£ Èç¹û meta/block ÎļþΪ¿Õ£¬Ôò¿ÉÖ¤Ã÷ new BlockReceiver ¶ÔÏó³É¹¦£¬¿É¼ì²éÏÂÒ»¸ö datanode ЭÖú¶¨Î»ÎÊÌâ¡£ 4. ³£¼ûÈÕÖ¾ÒâÒå 4.1 pipeline ½¨Á¢ case1 £ºDFSClient Öб¨ warn ÈÕÖ¾ NotReplicatedYetException sleeping <·¾¶> retries left£¬ ÎÞ¸ÃÈÕÖ¾ addBlock ()Ò»´Î³É¹¦ СÓÚ 4 ´Î addBlock()ͨ¹ýÖØÊԳɹ¦ µÈÓÚ 4 ´Îºó½ô¸ú warn ÈÕÖ¾ ¡±DataStreamer addBlock() ʧ°Ü Exception:¡± µÈÓÚ 4 ´Îºó½ô¸ú warn ÈÕÖ¾ ¡±DataStreamer addBlock() ÔÚ×îºóÒ»´ÎÖØÊԳɹ¦ Exception:¡± ´¦Àí·½Ê½£ºÈç¹û addBlock()ʧ°Ü£¬ÔòÐèÒª²é¿´µ±Ê± namenode µÄÈÕÖ¾¡£ Case 2£º ³öÏÖ info ÈÕÖ¾ ¡°Excluding node:¡±£¬ ºó½ô½Ó×Å ¡°Abandoning block¡± ´ú±í½¨Á¢ pipeline ʱ³ö´í£¬½øÐÐ abandon block£¬È»ºóÖØÊÔ¡£ ´¦Àí·½Ê½£ºÈç¹ûÖØÊÔ´ÎÊýСÓÚ 5£¬Ôò¿ÉºöÂÔ¡£ Case 3£º³öÏÖ info ÈÕÖ¾¡°Exception in createBlockOutputStream¡± ºóÓС°Bad connect ack with firstBadLink¡± ´ú±í½¨Á¢ pipeline µÄʱºò£¬ ½ÓÊÕÈÕÖ¾ÖÐÖ¸¶¨µÄ datanode µÄ ack ʱ£¬ socket timeout¡£ ´¦Àí·½Ê½£º¼ì²éÈÕÖ¾ÖÐÖ¸¶¨ datanode µÄ¸ºÔØ×´¿ö£¬ÓпÉÄÜÊÇÍøÂ緱æÔì³É¡£ 4.2 Êý¾Ý´«Êä Case 4£º³öÏÖwarnÈÕÖ¾"Error Recovery for block " + block + " failed " + " because recovery from primary datanode " + primaryNode + " failed " + recoveryErrorCount + " times. " + " Pipeline was " ´ú±íÈÕÖ¾ÖÐÖ¸¶¨µÄ datanode ³öÏÖ block recovery ʧ°Ü ´¦Àí·½Ê½£º²é¿´Ö¸¶¨ datanode µÄÈÕÖ¾ºÍ¼à¿ØÓпÉÄÜÊÇÓÉÓÚµ±Ê±ÍøÂ緱æ»òÕß datanode ÆäËû Ô­ÒòÔì³É³ö´í¡£µ±Îļþ¸±±¾Êýλ 3 ʱ£¬Error Recovery for block ³öÏÖ 19 ´Î£¬Ôò±íʾ¸Ã block recovery ʧ°Ü¡£Ó¦²é¿´¶ÔÓ¦ datanode µÄÈÕÖ¾£¬ÒÔ½øÒ»²½¶¨Î»ÎÊÌâ¡£ Case 5: ³öÏÖ info ÈÕÖ¾¡°Exception in receiveBlock for block¡±ÈÕ־ʱ£¬ËµÃ÷ÊÇÊý¾Ý´«Êä¹ý³Ì ÖгöÏÖÒì³£¡£ÐèÒª¸ù¾Ý¸ÃÈÕÖ¾Öб¨³öµÄ block id ºÍÒ쳣ջЭÖú¶¨Î»¡£