ÔÚHDFSÖУ¬¿É¿¿ÐÔͨ¹ý¶à¸±±¾µÄ·½Ê½À´ÊµÏÖ£¬´Ó¶ø½ÏµÍµÄ´æ´¢ÀûÓÃÂʳÉΪʱÏ»ùÓÚHDFSÓ¦ÓõÄÖ÷ÒªÎÊÌâÖ®Ò»¡£±¾ÎĽ«Ïêϸ½éÉÜHDFSÒ»¸öеÄÌØÐÔ¡ª¡ªErasure
Coding£¨EC£©£¬ ËüÔÚ±£Ö¤Í¬µÈ£¨»òÕ߸ü¸ß£©¿É¿¿ÐÔµÄÇé¿öϽ«´æ´¢ÀûÓÃÂÊÌá¸ßÁ˽üÒ»±¶¡£
±³¾°
½üЩÄê£¬Ëæ×Å´óÊý¾Ý¼¼ÊõµÄ·¢Õ¹£¬HDFS×÷ΪHadoopµÄºËÐÄÄ£¿éÖ®Ò»µÃµ½Á˹㷺µÄÓ¦Óá£È»¶ø£¬Ëæ×ÅÐèÒª´æ´¢µÄÊý¾Ý±»Ô½À´Ô½¿ìµÄ²úÉú£¬Ô½À´Ô½¸ßµÄHDFS´æ´¢ÀûÓÃÂÊÒªÇó±»Ìá³ö¡£¶ø¶ÔÓÚÒ»¸ö·Ö²¼Ê½ÎļþϵͳÀ´Ëµ£¬¿É¿¿ÐԱز»¿ÉÉÙ¡£Òò´Ë£¬ÔÚHDFSÖÐÿһ·ÝÊý¾Ý¶¼ÓÐÁ½¸ö¸±±¾£¬ÕâҲʹµÃ´æ´¢ÀûÓÃÂʽöΪ1/3£¬Ã¿TBÊý¾Ý¶¼ÐèÒªÕ¼ÓÃ3TBµÄ´æ´¢¿Õ¼ä¡£Òò´Ë£¬ÔÚ±£Ö¤¿É¿¿ÐÔµÄǰÌáÏÂÈçºÎÌá¸ß´æ´¢ÀûÓÃÂÊÒѳÉΪµ±Ç°HDFSÓ¦ÓõÄÖ÷ÒªÎÊÌâÖ®Ò»¡£
¾ÀɾÂë¼¼ÊõÆðÔ´ÓÚͨÐÅ´«ÊäÁìÓò£¬ºó±»Öð½¥ÔËÓõ½´æ´¢ÏµÍ³ÖС£Ëü¶ÔÊý¾Ý½øÐзֿ飬Ȼºó¼ÆËã³öһЩÈßÓàµÄУÑé¿é¡£µ±Ò»²¿·ÖÊý¾Ý¿é¶ªÊ§Ê±£¬¿ÉÒÔͨ¹ýÊ£ÓàµÄÊý¾Ý¿éºÍУÑé¿é¼ÆËã³ö¶ªÊ§µÄÊý¾Ý¿é¡£Facebook
µÄ¿ªÔ´ÏîÄ¿HDFS-RAIDÔÚHDFSÖ®ÉÏʹÓÃÁ˾ÀɾÂë¼¼Êõ¡£HDFS-RAID¶ÔÊôÓÚͬһÎļþµÄ¿é·Ö×é²¢ÒÀ´ÎÉú³ÉУÑé¿é£¬½«ÕâЩУÑé¿é¹¹³É¶ÀÁ¢µÄÎļþ£¬²¢ÓëÔʼµÄÊý¾ÝÎļþÒ»Ò»¶ÔÓ¦¡£RaidNode×÷Ϊһ¸öеĽÇÉ«±»ÒýÈë½øÀ´£¬Ëü¸ºÔð´ÓDataNodeÖжÁÈ¡ÎļþµÄÊý¾Ý¿é£¬¼ÆËã³öУÑé¿é£¬
²¢Ð´ÈëУÑéÎļþÖУ»Í¬Ê±£¬Ëü»¹ÖÜÆÚÐԵؼì²é±»±àÂëÁ˵ÄÎļþÊÇ·ñ´æÔڿ鶪ʧ£¬ÈçÓжªÊ§ÔòÖØÐ½øÐмÆËãÒÔ»Ö¸´¶ªÊ§µÄ¿é¡£HDFS-RAIDµÄÓŵãÊÇÆä¹¹½¨ÓÚHDFSÖ®ÉÏ£¬²»ÐèÒªÐÞ¸ÄHDFS±¾ÒѾ¸´ÔÓµÄÄÚ²¿Âß¼£¬µ«È±µãÒ²ÏÔ¶øÒ×¼û£ºÐ£ÑéÎļþ¶ÔÓû§ÊǿɼûµÄ£¬´æÔÚ±»Îóɾ³ýµÄ¿ÉÄÜ£»ÒÀÀµÓÚMySQLºÍMapReduceÀ´´æ´¢ÔªÊý¾ÝºÍÉú³ÉУÑéÎļþ£»RaidNodeÐèÒªÖÜÆÚÐԵزéÕÒ¶ªÊ§µÄ¿é£¬¼ÓÖØÁËNameNodeµÄ¸ºµ££»Ê¹Óõıà½âÂëÆ÷ÐÔÄܽϲÔÚʵ¼ÊÓ¦ÓÃÖÐÍùÍù²»ÄÜÂú×ãÒªÇó¡£ÁíÍ⣬ÓÉÓÚȱ·¦Î¬»¤£¬HDFSÒѽ«HDFS-RAIDµÄ´úÂë´Ócontrib°üÖÐÒÆ³ý£¬Õâ¸øÊ¹ÓÃHDFS-RAID´øÀ´²»ÉÙÀ§ÄÑ¡£
2014ϰëÄê£¬Ó¢ÌØ¶ûºÍCloudera¹²Í¬Ìá³öÁ˽«¾ÀɾÂëÈÚÈëµ½HDFSÄÚ²¿µÄÏë·¨ºÍÉè¼Æ£¨HDFS
EC£©£¬ËæºóÎüÒýÁ˰üÀ¨Hortonworks¡¢»ªÎª¡¢Yahoo!µÈÖڶ๫˾µÄ²ÎÓ룬ʹ֮³ÉΪHadoop¿ªÔ´ÉçÇø½ÏΪ»îÔ¾µÄÒ»¸öÏîÄ¿¡£½«¾ÀɾÂëÈÚÈëµ½HDFSÄÚ²¿´øÀ´ÁËÖî¶àºÃ´¦£ºËü²»ÔÙÐèÒªÈκεÄÍⲿÒÀÀµ£¬Óû§Ê¹ÓÃÆðÀ´¸üΪ·½±ã£»Æä´úÂë³ÉΪHDFSµÄÒ»²¿·Ö£¬±ãÓÚά»¤£»¿ÉÒÔ³ä·ÖÀûÓÃHDFSµÄÄÚ²¿»úÖÆÊ¹ÐÔÄܵõ½×î´ó³Ì¶ÈµÄÓÅ»¯¡£¾ÀɾÂëµÄ±à½âÂëÐÔÄÜ¶ÔÆäÔÚHDFSÖеÄÓ¦ÓÃÆð×ÅÖÁ¹ØÖØÒªµÄ×÷Óã¬Èç¹û²»ÀûÓÃÓ²¼þ·½ÃæµÄÓÅ»¯¾ÍºÜÄѵõ½ÀíÏëµÄÐÔÄÜ¡£Ó¢ÌضûµÄÖÇÄÜ´æ´¢¼ÓËٿ⣨ISA-L£©ÌṩÁ˶ԾÀɾÂë±à½âÂëµÄÓÅ»¯£¬¼«´óµÄÌáÉýÁËÆäÐÔÄÜ£¬ÕâÒ»µã½«ÔÚʵÑ鲿·Ö×öÏêϸµÄ²ûÊö¡£HDFS
ECÏîÄ¿Ö÷ҪҪʵÏÖÒÔÏµĹ¦ÄÜ£º
Óû§¿ÉÒÔ¶ÁºÍдһ¸öÌõÐβ¼¾Ö£¨Striping Layout£¬¶¨Òå¼ûÏÂÎÄ£©µÄÎļþ£»Èç¹û¸ÃÎļþµÄÒ»¸ö¿é¶ªÊ§£¬ºǫ́Äܹ»¼ì²é³ö²¢»Ö¸´£»Èç¹ûÔÚ¶ÁµÄ¹ý³ÌÖз¢ÏÖÊý¾Ý¶ªÊ§£¬Äܹ»Á¢¼´½âÂë³ö¶ªÊ§µÄÊý¾Ý´Ó¶ø²»Ó°Ïì¶Á²Ù×÷¡£
Ö§³Ö½«Ò»¸ö¶à±¸·Ýģʽ£¨HDFSÔÓÐģʽ£©µÄÎļþת»»³ÉÁ¬Ðø²¼¾Ö£¨Contiguous
Layout£¬¶¨Òå¼ûÏÂÎÄ£©£¬ÒÔ¼°´ÓÁ¬Ðø²¼¾Öת»»³É¶à±¸·Ýģʽ¡£
±à½âÂëÆ÷½«×÷Ϊ²å¼þ£¬Óû§¿ÉÖ¸¶¨ÎļþËùʹÓõıà½âÂëÆ÷¡£
ÓÉÓÚHDFSµÄÄÚ²¿Âß¼ÒѾÏ൱¸´ÔÓ£¬HDFS ECÏîÄ¿½«·Ö½×¶Î½øÐУºµÚÒ»½×¶Î£¨HDFS-7285£©ÒѾʵÏÖµÚ1¸ö¹¦ÄÜ£¬µÚ¶þ½×¶Î£¨HDFS-8030£©ÕýÔÚ½øÐÐÖУ¬½«ÊµÏÖµÚ2ºÍµÚ3¸ö¹¦ÄÜ¡£±¾ÎĽ«Ö÷Òª²ûÊöµÚÒ»½×¶Î£¨HDFS-7285£©µÄÉè¼ÆÓëʵÏÖ¡£
Ïà¹Ø¸ÅÄî
¾ÀɾÂ루Erasure Code£©Óë Reed SolomonÂë
Ôڴ洢ϵͳÖУ¬¾ÀɾÂë¼¼ÊõÖ÷ÒªÊÇͨ¹ýÀûÓþÀɾÂëËã·¨½«ÔʼµÄÊý¾Ý½øÐбàÂëµÃµ½Ð£Ñ飬²¢½«Êý¾ÝºÍУÑéÒ»²¢´æ´¢ÆðÀ´£¬ÒÔ´ïµ½ÈÝ´íµÄÄ¿µÄ¡£Æä»ù±¾Ë¼ÏëÊǽ«£ë¿éÔʼµÄÊý¾ÝÔªËØÍ¨¹ýÒ»¶¨µÄ±àÂë¼ÆË㣬µÃµ½£í¿éУÑéÔªËØ¡£¶ÔÓÚÕâ£ë+£í¿éÔªËØ£¬µ±ÆäÖÐÈÎÒâµÄ£í¿éÔªËØ³ö´í£¨°üÀ¨Êý¾ÝºÍУÑé³ö´í£©£¬¾ù¿ÉÒÔͨ¹ý¶ÔÓ¦µÄÖØ¹¹Ëã·¨»Ö¸´³öÔÀ´µÄ£ë¿éÊý¾Ý¡£Éú³ÉУÑéµÄ¹ý³Ì±»³ÉΪ±àÂ루encoding£©£¬»Ö¸´¶ªÊ§Êý¾Ý¿éµÄ¹ý³Ì±»³ÆÎª½âÂ루decoding£©¡£
Reed-Solomon£¨RS£©ÂëÊǴ洢ϵͳ½ÏΪ³£ÓõÄÒ»ÖÖ¾ÀɾÂ룬ËüÓÐÁ½¸ö²ÎÊýkºÍm£¬¼ÇΪRS(k,m)¡£Èçͼ1Ëùʾ£¬k¸öÊý¾Ý¿é×é³ÉÒ»¸öÏòÁ¿±»³ËÉÏÒ»¸öÉú³É¾ØÕó£¨Generator
Matrix£©GT´Ó¶øµÃµ½Ò»¸öÂë×Ö£¨codeword£©ÏòÁ¿£¬¸ÃÏòÁ¿ÓÉk¸öÊý¾Ý¿éºÍm¸öУÑé¿é¹¹³É¡£Èç¹ûÒ»¸öÊý¾Ý¿é¶ªÊ§£¬¿ÉÒÔÓÃ(GT)-1³ËÒÔÂë×ÖÏòÁ¿À´»Ö¸´³ö¶ªÊ§µÄÊý¾Ý¿é¡£RS(k,m)×î¶à¿ÉÈÝÈÌm¸ö¿é£¨°üÀ¨Êý¾Ý¿éºÍУÑé¿é£©¶ªÊ§¡£

ͼ1 RS(4,2)±àÂë¹ý³ÌʾÒâͼ
¿é×飨BlockGroup£©
¶ÔHDFSµÄÒ»¸öÆÕͨÎļþÀ´Ëµ£¬¹¹³ÉËüµÄ»ù±¾µ¥Î»Êǿ顣¶ÔÓÚECģʽϵÄÎļþ£¬¹¹³ÉËüµÄ»ù±¾µ¥Î»Îª¿é×é¡£¿é×éÓÉÒ»¶¨ÊýÄ¿µÄÊý¾Ý¿é¼ÓÉÏÉú³ÉµÄУÑé¿é·ÅÒ»Æð¹¹³É¡£ÒÔRS(6,3)ΪÀý£¬Ã¿Ò»¸ö¿é×é°üº¬1-6¸öÊý¾Ý¿é£¬ÒÔ¼°3¸öУÑé¿é¡£½øÐÐEC±àÂëµÄǰÌáÊÇÿ¸ö¿éµÄ³¤¶ÈÒ»Ö¡£Èç¹û²»Ò»Ö£¬ÔòÓ¦Ìî³ä0¡£Í¼2¸ø³öÈýÖÖ²»Í¬ÀàÐ͵Ŀé×é¼°Æä±àÂë¡£

ͼ2 ÈýÖÖÀàÐÍ¿é×é¼°Æä±àÂë
Á¬Ðø²¼¾Ö£¨Contiguous Layout£© VS ÌõÐβ¼¾Ö£¨Striping
Layout£©
Êý¾Ý±»ÒÀ´ÎдÈëÒ»¸ö¿éÖУ¬Ò»¸ö¿éдÂúÖ®ºóÔÙдÈëÏÂÒ»¸ö¿é£¬Êý¾ÝµÄÕâÖÖ·Ö²¼·½Ê½±»³ÆÎªÁ¬Ðø²¼¾Ö¡£ÔÚһЩ·Ö²¼Ê½ÎļþϵͳÈçQFSºÍCephÖУ¬¹ã·ºÊ¹ÓÃÁíÍâÒ»ÖÖ²¼¾Ö£ºÌõÐβ¼¾Ö¡£Ìõ£¨stripe£©ÊÇÓÉÈô¸É¸öÏàͬ´óСµ¥Ôª£¨cell£©¹¹³ÉµÄÐòÁС£ÔÚÌõÐβ¼¾ÖÏ£¬Êý¾Ý±»ÒÀ´ÎдÈëÌõµÄ¸÷¸öµ¥ÔªÖУ¬µ±Ìõ±»Ð´ÂúÖ®ºó¾ÍдÈëÏÂÒ»¸öÌõ£¬Ò»¸öÌõµÄ²»Í¬µ¥ÔªÎ»ÓÚ²»Í¬µÄÊý¾Ý¿éÖС£
ͼ3 Á¬Ðø²¼¾ÖÓëÌõÐβ¼¾ÖʾÒâͼ
×ÜÌåÉè¼Æ
²¼¾ÖµÄÑ¡Ôñ
¶ÔHDFS ECÀ´Ëµ£¬Ê×ÒªµÄÎÊÌâÊÇÑ¡ÔñʲôÑùµÄ²¼¾Ö·½Ê½¡£Á¬Ðø²¼¾ÖʵÏÖÆðÀ´½ÏΪÈÝÒ×£¬µ«ËüÖ»ÊʺϽϴóµÄÎļþ¡£ÁíÍ⣬Èç¹ûÈÃclient¶ËÖ±½Óдһ¸öÁ¬Ðø²¼¾ÖÎļþÐèÒª»º´æÏÂ×ã¹»µÄÊý¾Ý¿é£¬È»ºóÉú³ÉУÑé¿é²¢Ð´È룬ÒÔRS£¨6,3£©£¬blockSize=128MΪÀý£¬client¶ËÐèÒª»º´æ1.12GµÄÊý¾Ý£¬Õâµã¾ö¶¨ÁËÁ¬Ðø²¼¾ÖµÄÎļþ¸üÊʺÏÓÉÆÕͨÎļþת»¯¶øÀ´£¬¶øÌõÐβ¼¾Ö¾Í²»´æÔÚÉÏÊöȱµã¡£ÓÉÓÚÒ»¸öÌõµÄµ¥ÔªÍùÍù½ÏС£¨Í¨³£Îª64K»ò1M£©£¬Òò´ËÎÞÂÛÎļþ´óС£¬ÌõÐβ¼¾Ö¶¼¿ÉÒÔΪÎļþ½ÚÊ¡³ö¿Õ¼ä¡£client¶ËÔÚдÍêÒ»¸öÌõµÄÊý¾Ýµ¥Ôªºó¾Í¿ÉÒÔ¼ÆËã³öУÑéµ¥Ôª²¢Ð´³ö£¬Òò´Ëclient¶ËÐèÒª»º´æµÄÊý¾ÝºÜÉÙ¡£
ÌõÐβ¼¾ÖµÄÒ»¸öȱµãÊÇ»áÓ°ÏìһЩλÖÃÃô¸ÐÈÎÎñµÄÐÔÄÜ£¬ÒòΪÔÏÈÔÚÒ»¸ö½ÚµãÉϵÄÒ»¸ö¿é±»·ÖÉ¢µ½Á˶à¸ö²»Í¬µÄ½ÚµãÉÏ¡£
HDFS×î³õ¾ÍÊÇΪ½Ï´óÎļþÉè¼ÆµÄ·Ö²¼Ê½Îļþϵͳ£¬µ«Ëæ×ÅÔ½À´Ô½¶àµÄÓ¦Óý«Êý¾Ý´æ´¢ÓÚHDFSÉÏ£¬HDFSµÄС£¨¼´Ð¡ÓÚ1¸ö¿é×飩ÎļþÊýĿԽÀ´Ô½¶à£¬¶øÇÒËüÃÇËùÕ¼¿Õ¼äµÄ±ÈÂÊÒ²Ô½À´Ô½¸ß¡£ÒÔClouderaһЩ½Ï´ó¿Í»§µÄ¼¯ÈºÎªÀý£¬Ð¡ÎļþÕ¼Õû¸ö¿Õ¼äµÄ±ÈÀýÔÚ36-97%Ö®¼ä¡£
»ùÓÚÒÔÉÏ·ÖÎö£¬HDFS ECÓÅÏÈ¿¼ÂǶÔÌõÐβ¼¾ÖµÄÖ§³Ö¡£ÏÂÃæµÄÉè¼ÆÓëʵÏÖÒ²Ö÷ÒªÎ§ÈÆÒѾʵÏÖÁ˵ÄÌõÐβ¼¾ÖÕ¹¿ª¡£
NameNode¶ËÀ©Õ¹
ÔÚECģʽÏ£¬¹¹³ÉÎļþµÄ»ù±¾µ¥Î»Îª¿é×飬Òò´ËÊ×ÏÈÐèÒª¿¼ÂǵÄÊÇÈçºÎÔÚNameNodeÀï±£´æÃ¿¸öÎļþµÄ¿é×éÐÅÏ¢¡£Ò»ÖֱȽÏÖ±½ÓµÄ·½·¨ÊǸøÃ¿¸ö¿é×é·ÖÅäÒ»¸ö¿éID£¬Í¬Ê±ÓÃÒ»¸öMapÀ´¼Ç¼Õâ¸öIDÓë¿é×éÐÅÏ¢µÄÓ³É䣬ÿ¸ö¿é×éÐÅÏ¢°üº¬ÁËÿ¸öÄÚ²¿¿éµÄÐÅÏ¢¡£¶ÔСÎļþÀ´Ëµ£¬ÕâÖÖ×ö·¨½«Ôö¼ÓÆäÔÚNameNodeÖеÄÄÚ´æÏûºÄ¡£ÒÔRS£¨6,3£©ÎªÀý£¬Èç¹ûÒ»¸öÎļþ±È6¸ö¿éÂÔСЩ£¬ÄÇôNameNode±ØÐëΪËüά»¤10¸öID£¨1¸ö¿é×éID¡¢6¸öÊý¾Ý¿éIDºÍ3¸öУÑé¿éID£©¡£ÔÚСÎļþÊýĿռÓŵÄÇé¿öÏ£¬NameNodeµÄÄÚ´æÊ¹Óý«ÃæÁÙ¿¼Ñé¡£
Ò»¸ö¿éIDÓÐ64룬ÕâÀォµÚ1¸öλ×÷ΪflagÀ´Çø·Ö¿éµÄÀàÐÍ£ºÈç¹ûΪ1£¬ÔòΪEC¿é£¨ÌõÐβ¼¾ÖµÄEC¿é£¬Á¬Ðø²¼¾Ö½«ÔÚµÚ¶þ½×¶Î¿¼ÂÇ£©£»Èç¹ûΪ0£¬ÔòΪÆÕͨ¿é¡£¶ÔEC¿éÀ´Ëµ£¬»á½«Ê£ÏµÄ63λ·Ö³ÉÁ½²¿·Ö£º×îºóµÄ4λÓÃÀ´±êʶÄÚ²¿¿éÔÚ¿é×éÖеÄλÖã¬Ç°ÃæµÄ59λÓÃÀ´Çø·Ö²»Í¬µÄ¿é×é¡£¿é×éIDµÈͬÓÚµÚ0¸öÄÚ²¿¿éID£¬ÆäËûµÄÄÚ²¿¿éID¿ÉÓÉ¿é×éID¼ÓÉÏÆäÔÚ¿é×éÖеÄλÖÃË÷ÒýµÃµ½£¬±ÈÈçµÚ0¸öÄÚ²¿¿éIDΪ0xB23400£¨Ò²¼´¿é×éID£©£¬ÄÇôµÚ3¸öÄÚ²¿¿éµÄIDΪ0xB23403¡£ÓÉÓÚÖ»ÊÇÓÃ×îºó4λÀ´Çø·ÖÒ»¸ö¿é×éÖеÄÄÚ²¿¿é£¬Òò´Ë¶ÔÒ»¸ö¿é×éÀ´Ëµ£¬ÏµÍ³Ä¿Ç°Ö§³Ö×î¶à16¸öÄÚ²¿¿é¡£
ÕâÑùÒ»À´¾Í¿ÉÒÔ¾¡¿ÉÄܵØÀûÓÃHDFSµ±Ç°µÄ»úÖÆÀ´ÊµÏÖ¶Ô¿é×éµÄÖ§³Ö¡£¿é×éÒÀ¾ÉÓÃÀàBlockÀ´±íʾ£¬ÆäÖеÄÈý¸ö³ÉÔ±£ºblockId´ú±í¿é×éID£»numBytes´ú±í¿é×é´óС£¬¼´ËùÓÐÊý¾Ý¿é´óС֮ºÍ£¬²»°üÀ¨Ð£Ñé¿éµÄ´óС£»generationStamp´ú±í¿é×éµÄÉú³Éʱ¼ä´Á£¬ËùÓÐÄÚ²¿¿é¹²Ïí¿é×éµÄʱ¼ä´Á¡£ÕâÀï¿ÉÒÔ¸ù¾Ý¿é×éµÄBlock¶ÔÏóµÃµ½ÄÚ²¿¿éµÄBlock¶ÔÏó£ºblockIdÓÉ¿é×éID¼ÓÉϸÃÄÚ²¿¿éÔÚ¿é×éÖеÄλÖÃË÷Òý£»numBytes¿ÉÓÉ¿é×é´óСºÍ¸ÃÄÚ²¿¿éλÖÃË÷Òý¼ÆËã³öÀ´£»Éú³Éʱ¼ä´ÁµÈͬÓÚ¿é×éµÄʱ¼ä´Á¡£Ã¿¸öÄÚ²¿¿éËùÔÚµÄDataNodeÐÅÏ¢»á´æ´¢ÔÚÆäËùÊô¿é×éÔÚBlocksMapÖжÔÓ¦µÄBlockInfo¶ÔÏóÖС£µ±Ò»¸ö¿é±»DataNode±¨¸æ¸øNameNodeʱ£¬NameNode¿ÉÒÔͨ¹ýÆä¿éIDÅжϸÿéµÄÀàÐÍ£¬Èç¹ûΪEC¿éÔò½«×îºó4λÇåÁã±ãµÃµ½¿é×éID¡£Í¨¹ýÕâÖÖ·½Ê½£¬ÎÒÃÇÖ»´æ´¢ÁËÒ»¸ö¿é×éID£¬´óÁ¿ÄÚ²¿¿éµÄIDͨ¹ý¼ÆËãµÃµ½¡£ÄÚ²¿¿éµÄ´óСºÍʱ¼ä´ÁÒ²¿ÉÓÉ¿é×éÐÅÏ¢µÃµ½£¬Òò´Ë´ó´ó¼õÉÙÁËNameNodeÄÚ´æµÄÕ¼Óá£

ͼ4 NameNode¶ËÀ©Õ¹
µ±clientдÂúÒ»¸ö¿é×é»ò¸Õ¿ªÊ¼Ð´Êý¾Ýʱ£¬ËüÏòNameNodeÉêÇëÒ»¸öеĿé×顣еĿé×é±£´æÓÚINodeFileÖв¢·µ»Ø¸øclient¡£Ð¿é×é°üº¬¸÷¸öÄÚ²¿¿éµÄDataNodeÐÅÏ¢£¬ËüÃÇÓÉBlockPlacementPolicyÈ·¶¨¡£ÕâÀïÐèÒª¸÷¸öÄÚ²¿¿é¾¡¿ÉÄܵķֲ¼ÔÚ²»Í¬µÄDataNode»ò»ú¼ÜÉÏ£¬ÒÔÃâÔì³É¶à¸öÄÚ²¿¿éͬʱ¶ªÊ§¶ø¼Ó´óÊý¾Ý¶ªÊ§µÄ·çÏÕ¡£Òò´Ë£¬HDFS
ECÐèҪʹÓ÷ûºÏ×Ô¼ºÒªÇóµÄBlockPlacementPolicy¡£
NameNodeÖÐÓÐÒ»¸öÊØ»¤Ïß³ÌReplicationMonitor£¬Ëü»áÖÜÆÚÐÔµØÖ´ÐÐÊý¾Ý¿éµÄ±¸·ÝºÍɾ³ýÈÎÎñ£¬ÕâЩÈÎÎñÓÉÀàUnderRepliationBlocksºÍInvalidateBlocksÀ´Î¬»¤¡£ÕâÖÖ·½Ê½Ò²·Ç³£ÊʺÏECÈÎÎñ£¬°üÀ¨¶ªÊ§¿éµÄ»Ö¸´£¬¿éÔڶ౸·ÝģʽºÍECģʽ֮¼äµÄת»»µÈ¡£
UnderReplicatedBlocksÀฺÔð¶Ô¸±±¾Êý²»×ãµÄ¿é½øÐи´ÖÆ¡£Ëü°üº¬¶à¸öÓÅÏȼ¶¶ÓÁУ¬ÓÃÓÚÇø·Ö²»Í¬¸´ÖÆÈÎÎñµÄ½ô¼±³Ì¶È¡£ÎÒÃÇ¿ÉÒÔ½«Ò»¸ö¿é×éµÄ¸±±¾Êý¶¨ÒåΪÆäÊý¾Ý¿éºÍУÑé¿éÊýĿ֮ºÍ£¬Èç¹ûÆäÖеÄÒ»¸öÄÚ²¿¿é¶ªÊ§£¬¾Í½«Æä¸±±¾Êý¼õ1£¬ÕâÑùÆä¸±±¾Êý¾Í²»×㣬¾Í¿ÉÒÔ·ÅÈëµ½UnderReplicatedBlocksµÄijһ¸ö¶ÓÁÐÖС£¿ÉÒÔ¸ù¾Ý¶ªÊ§µÄÄÚ²¿¿éµÄÊýÄ¿À´¾ö¶¨¼ÓÈëµ½ÄĸöÓÅÏȼ¶¶ÓÁÐÖС£µ±Ñ¡¶¨µÄDataNode´«À´ÐÄÌøÊ±£¬NameNodeÏò¸ÃDataNode·¢ËÍÒ»¸öBlockECRecoveryCommand£¬DataNode½ÓÊÕµ½¸ÃÃüÁÆô¶¯Ò»¸ö»Ö¸´ÈÎÎñ¡£ÐèҪעÒâµÄÊÇ£¬µ±·¢ÏÖÒ»¸ö¿é×éȱËðºóδ±ØÁ¢¼´Æô¶¯»Ö¸´ÈÎÎñ£¬ÒòΪ»Ö¸´ÈÎÎñ»áÏûºÄ´óÁ¿µÄÍøÂç´ø¿í£¬ÒÔRS£¨6,3£©ÎªÀý£¬³Ðµ£ÈÎÎñµÄDataNodeÐèÒª¶ÁÈ¡6¸öÄÚ²¿¿éÓÃÓÚ½âÂ빤×÷¡£Èç¹ûÒ»¸ö¼¯ÈºÃ¿ÌìÓÐ1%-2%µÄ½Úµãå´µôµÄ»°£¬Á¢¼´Æô¶¯»Ö¸´ÈÎÎñ¿ÉÄÜ»áºÄ¾¡ÏµÍ³µÄ´ø¿í¡£Òò´Ë£¬»Ö¸´ÈÎÎñµÄÖ´ÐÐÐèÒªÅäºÏÒ»¶¨µÄ²ßÂÔ£¬ÀýÈ磬ÓÅÏÈÖ´ÐÐȱËðÀ÷º¦µÄ¿é×飬ÿÌìÏÞ¶¨»Ö¸´ÈÎÎñµÄÊýÁ¿£¬ÔÚϵͳ¿ÕÏÐʱÆô¶¯»Ö¸´ÈÎÎñµÈ¡£
Client ¶ËÀ©Õ¹
Óû§ÔÚдһ¸öÎļþǰ¿ÉÒÔÏÈÖ¸¶¨¸ÃÎļþΪECģʽ£¬Ò²¿ÉÒÔ¶ÔÒ»¸öÎļþ¼ÐÖ¸¶¨ECģʽ£¬È»ºóËùÓÐдÈë¸ÃÎļþ¼ÐµÄÎļþ¶¼Ä¬ÈÏΪECģʽ¡£
clientд
HDFS clientͨ¹ýÊä³öÁ÷DFSOutputStreamÏòÎļþϵͳдÈëÊý¾Ý¡£DFSOutputStreamµÄʵÏÖ½ÏΪ¸´ÔÓ£¬ÎªÁËÄܹ»¶ÔÆä½øÐй¦ÄÜÀ©Õ¹£¬ÎÒÃǶԸÃÀà½øÐÐÖØ¹¹£¬½«ÄÚ²¿ÀàDataStreamerºÍPacket£¨ÖØÃüÃûΪDFSPacket£©¶ÀÁ¢³öÀ´£¬Ê¹µÃ¸÷¸öÀà¶¼ÓÐÇåÎú¶ÀÁ¢µÄ¹¦ÄÜ£¬´Ó¶øÎªÊµÏÖECģʽϵÄд²Ù×÷Ìṩ±ãÀû¡£
µ±Ð´Ò»¸öÌõÐβ¼¾ÖµÄÎļþʱ£¬ÐèÒª½«Êý¾Ý·ÖÉ¢µØÐ´µ½¶à¸öDataNodeÉÏ£¬Îª´Ë£¬ÎÒÃÇʵÏÖÁËDFSOutputStreamµÄ×ÓÀàDFSStripedOutputStream£¬ËüÓµÓжà¸ö²¢·¢µÄDataStreamer¡£Í¼5¸ø³öÁËDFSStripedOutputStreamµÄÄÚ²¿¹¤×÷ÔÀí¡£

ͼ 5 DFSStripedOutputStream¹¤×÷ÔÀí
Êý¾ÝÒÔÌõÐβ¼¾ÖµÄ·½Ê½Ð´Èëµ½CellBuffersÖС£CellBuffersÓµÓжà¸ö»º´æ£¬Ã¿¸ö»º´æ¶ÔÓ¦ÌõÖеÄÒ»¸öµ¥Ôª£¬Ò²¶ÔÓ¦×ÅÒ»¸öDataStreamer¡£µ±Ò»¸öÌõÖеÄÊý¾Ýµ¥ÔªÐ´ÍêÖ®ºó£¬DFSStripedOutputStream»áÁ¢¿Ì¼ÆËã³öУÑéµ¥Ôª²¢Ð´È뵽УÑé¿é»º´æÖС£µ±Ò»¸ö»º´æÖеÄÊý¾ÝÄܹ»×°ÂúÒ»¸öDFSPacketʱ£¬¸Ã»º´æ¾Í½«Êý¾Ý×°ÈëÒ»¸öDFSPacket²¢´«¸ø¸Ã»º´æ¶ÔÓ¦µÄDataStreamer¡£µ±Êý¾ÝдÍê×¼±¸¹Ø±ÕÎļþʱ£¬×îºóµÄÒ»¸öÌõ¿ÉÄÜÊý¾Ýµ¥ÔªÃ»ÓÐдÂú£¬ÕâʱÐèÒª¶ÔÊý¾Ýµ¥Ôª²¹ÁãºóÉú³É¸ÃÌõµÄУÑéµ¥Ôª²¢Ð´ÈëУÑé¿é»º´æÖУ¬
È»ºóÉú³É×îºóµÄDFSPacket²¢½«ËüÃÇ·¢ËÍÖÁ¸÷×ÔµÄDataStreamer¡£
ÔÚдһ¸öеĿé×éǰ£¬DFSStripedOutputStream»áÏòNameNodeÉêÇë·ÖÅäÒ»¸öпé×é¡£NameNode»á·µ»ØÒ»¸öLocatedBlock¶ÔÏ󣬸öÔÏó°üº¬Ã¿¸öÄÚ²¿¿éµÄDataNodeÐÅÏ¢¡£DFSStripedOutputStream»á½âÎö¸Ã¶ÔÏó£¬Éú³É³ö¸÷¸öÄÚ²¿¿éÈ»ºó·¢Ë͸øCoordinator¡£Coordinator¸ºÔð¸÷¸öDataStreamerÓëDFSStripedOutputStreamµÄе÷¹¤×÷£ºDataStreamer»áµÈ´ýCoordinator´«µÝ¸øËüÒ»¸öÄÚ²¿¿éÓÃÓÚ´´½¨Êý¾ÝÁ÷ͨµÀ£»µ±DataStreamer¿ªÊ¼¹¤×÷ºó£¬DFSStripedOutputStream±ã»áÔÚCoordinatorÉϵȴý¸÷¸öDataStreamerµÄ¹¤×÷½á¹û£»DataStreamerдÍêÒ»¸öÄÚ²¿¿éºó»áÏòCoordinator·¢ËÍÒ»¸ö½áÊø¿é£¬ÒԻ㱨´Ë´Î¹¤×÷µÄ½á¹û£¨ÈçдÈë¶àÉÙ×Ö½ÚµÄÊý¾Ý£©£»CoordinatorËѼ¯µ½ËùÓеĽáÊø¿éºó»ã±¨¸øµÈ´ýÔÚÆäÉϵÄDFSStripedOutputStream£»DFSStripedOutputStream¾Ý´ËÀ´¾ö¶¨ºóÐø²½Ö裬Èç¹ûÌ«¶àµÄDataStreamerʧ°Ü£¬Ôò½áÊøÐ´²Ù×÷²¢·µ»Ø£¬·ñÔòתÏò´¦ÀíCellBuffersÖÐеÄÊý¾Ý¡£
DFSStripedOutputStreamÔÚд¹ý³ÌÖпÉÒÔÈÝÈÌÒ»¶¨ÊýÄ¿µÄDataStreamerʧ°Ü¡£ÒÔRS£¨6,3£©ÎªÀý£¬Èç¹ûÔÚдһ¸ö¿é×éʱ£¬Ê§°ÜµÄDataStreamer²»³¬¹ý3¸ö£¬ÄÇôʧ°ÜµÄÄÚ²¿¿éÔÚÒÔºó¶Áȡʱ±»¼ÆËã¡£
µ±ÏÂÒ»¸ö¿é×éµ½À´£¬Ê§°ÜµÄDataStreamerÓÖ¿ÉÒÔÖØÐ¿ªÊ¼Ð´Ò»¸öеĿ顣
client¶Ë¶Á
client¶ÁÒ»¸öÌõÐβ¼¾ÖÎļþµÄÂß¼ÒªÏà¶Ô¼òµ¥¡£ÓÉÓÚÊý¾ÝÔ´·Ö²¼ÔÚ¶à¸öDataNodeÉÏ£¬Òò´ËÔÚ½øÐжÁµÄʱºòÐèÒªÁ¬½Ó¶ą̀Êý¾Ý¿éËùÔÚµÄDataNode¡£
¶Á²Ù×÷µÄÀ©Õ¹¹¦ÄÜÓÉDFSStripedInputStreamʵÏÖ£¬Ëü¼Ì³ÐÁËDFSInputStream¡£
DFSStripedInputStreamÒÔÌõΪµ¥Î»½øÐжÁÈ¡¡£
clientÔÚдµÄʱºò£¬Èç¹ûÒ»¸ö¿é×éÖÐÖ»ÓнÏÉÙµÄÄÚ²¿¿éд²Ù×÷ʧ°Ü£¬client»á¼ÌÐøÐ´ÏÂÈ¥¡£Òò´Ë£¬clientÔÚ¶ÁµÄʱºò¾Í»áÓöµ½¸ö±ðÊý¾Ý¿é¶ªÊ§µÄÇé¿ö¡£ÎªÁËÄÜʹ¶Á²Ù×÷½øÐÐÏÂÈ¥£¬clientÐèÒªÁ¬½ÓÒ»¶¨ÊýÄ¿µÄУÑé¿é£¬¶ÁÈ¡ÏàÓ¦µÄУÑéÊý¾Ý²¢Í¨¹ý½âÂëÀ´µÃµ½¶ªÊ§µÄÊý¾Ý¡£ÕâÖÖÇé¿öÏ£¬clientÐèÒªÁ¬½Ó¸ü¶àµÄDataNodeÒÔ»ñÈ¡²ÎÓë½âÂëµÄУÑéÊý¾Ý£¬²¢ÇÒ½âÂëÒ²»áÏûºÄclientÒ»¶¨µÄCPU×ÊÔ´¡£ÎªÁ˼õÉÙÕâÖÖÇé¿öµÄ·¢Éú£¬ÎÒÃÇÐèÒªÔÚºǫ́À´¼ì²âÓÐȱʧµÄ¿é×é²¢½øÐлָ´¡£
Datanode ¶ËÀ©Õ¹
DataNode¶ËµÄÀ©Õ¹Ö÷ÒªÊÇΪÁËʵÏÖºǫ́¶Ô¶ªÊ§Êý¾Ý¿éµÄ½âÂ룬ÒÔ¼°¶ÔÊý¾Ý¿é½øÐбàÂëÉú³ÉУÑé¿é£¬±àÂ벿·Ö½«ÔÚµÚ¶þ½×¶ÎʵÏÖ¡£
<
p>
ͼ 6 DataNode¶ËÀ©Õ¹
ͼ6չʾÁËDataNode¶ËµÄÀ©Õ¹¡£ÎªÁ˶ÀÁ¢µÄ´¦ÀíECÏà¹ØµÄÈÎÎñ£¬ÎÒÃÇÔÚDataNodeÖÐÌí¼ÓÁËÒ»¸öеÄÀàErasureCodingWorker¡£¸ÃÀàά»¤ÁËÒ»¸öÏ̳߳أ¬Ã¿µ±ÓÐÒ»¸ö½âÂëÈÎÎñµ½À´Ê±£¬±ã»á½«ÈÎÎñ½»ÓÉReconstructAndTransferBlockÏ̴߳¦Àí¡£ReconstructAndTransferBlockÏ̴߳ÓÈô¸É¸öDataNode¶ÁÈ¡½âÂëËùÐèÒªµÄÊý¾Ý£¬Ö´ÐнâÂë¼ÆË㣬Ȼºó½«»Ö¸´³öÀ´µÄ¿é±£´æµ½Ä¿±ê½ÚµãÉÏ¡£Ò»µ©ÈÎÎñÍê³É£¬ErasureCodingWorker»áÏòNameNode·¢ËÍÒ»¸öÈ·ÈÏ¡£
ÐÔÄܲâÊÔ
¾ÀɾÂëµÄ±à½âÂëÊǷdz£ÏûºÄCPUµÄ£¬Èç¹û²»¶ÔÆä½øÐÐÓÅ»¯ÔòºÜÄÑÂú×ãʵ¼ÊÓ¦ÓõÄÒªÇó¡£Ó¢ÌضûµÄ¿ªÔ´ÖÇÄÜ´æ´¢¼ÓËÙ¿âISA-L£¬Í¨¹ýÀûÓÃÓ²¼þµÄ¸ß¼¶Ö¸Á£¨ÈçSSE£¬AVX£¬AVX2£©À´ÊµÏÖÁ˱à½âÂëµÄÓÅ»¯¡£ISA-Lͬʱ֧³ÖLinuxºÍWindowsƽ̨¡£
ÔÚHDFS ECÖУ¬ÎÒÃÇʵÏÖÁËÁ½ÖÖÐÎʽµÄReed-SolomonËã·¨£ºÒ»ÖÖÊÇ´¿JavaʵÏÖ£¬ÁíÒ»ÖÖÊÇ»ùÓÚÓ¢ÌØ¶ûµÄISA-L¡£ÎÒÃǽ«ÔÚʵÑéÖбȽÏÕâÁ½ÖÖʵÏÖµÄÐÔÄÜ£¬Í¬Ê±²ÎÓë±È½ÏµÄ»¹ÓÐHDFS-RAIDÖеÄʵÏÖ¡£ËùÓеÄʵÑ鶼ѡÔñʹÓÃRS£¨6,3£©£¬ÕâÒ²ÊÇHDFS
ECÖеÄĬÈÏÖµ¡£
ͼ7ÏÔʾÁËÄÚ´æÖи÷¸ö±à½âÂëÆ÷µÄÐÔÄܱȽϡ£´ÓͼÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬ISA-LµÄÐÔÄÜÊÇJavaµÄ4-5±¶£¬ÊÇHDFS-RAIDµÄ20±¶×óÓÒ¡£

ͼ7 ²»Í¬±à½âÂëÆ÷ÐÔÄܱȽÏ

ͼ8 HDFS I/OÐÔÄܱȽÏ
ͼ8¸ø³öÁ˲»Í¬±à½âÂëÆ÷HDFS I/OµÄÐÔÄܶԱȡ£¸ÃʵÑéÔËÐÐÓÚÒ»¸ö11½ÚµãµÄ¼¯ÈºÉÏ£¨1¸öNameNode£¬9¸öDataNode£¬1¸öclient£©£¬½Úµã¼äµÄÍøÂç´ø¿íΪ10GigE¡£ÊµÑé·½·¨ÎªÔÚclient½ÚµãÉÏÏòHDFSдºÍ¶ÁÒ»¸ö12GBµÄÎļþ¡£ÎªÁ˲âÊÔ½âÂëÐÔÄÜ£¬ÎÒÃÇÔÚ¶Á֮ǰÏÈɱËÀÁ½Ì¨DataNode¡£´Óͼ8ÎÒÃÇ¿ÉÒÔ¿´³ö£¬»ùÓÚISA-LµÄ±à½âÂëÆ÷µÄÐÔÄܾùÔ¶Ô¶ÓÅÓÚÆäËû±à½âÂëÆ÷£¬Ïà¶ÔÓÚNew
Java CoderÀ´Ëµ£¬ISA-LдËÙ¶ÈÊÇÆä6±¶£¬¶ÁËÙ¶ÈÊÇÆä3.5±¶¡£ÌõÐβ¼¾ÖÎļþµÄÒ»¸ö¿éÊÇ·Ö²¼ÔÚ²»Í¬µÄDataNodeÉÏ£¬Æä¶ÁºÍд¶¼¿ÉÒÔ²¢·¢µØ½øÐУ¬´ÓÀíÂÛÉϽ²£¬Æä¶ÁдÐÔÄÜÓ¦¸Ã¸ßÓÚ3±¸·Ýģʽ¡£µ«´ÓʵÑéÊý¾ÝÉÏ¿´£¬½öISA-LµÄÐÔÄÜÔ¶Ô¶¸ßÓÚ3±¸·Ýģʽ£¬ÆäËûµÄ±à½âÂëÆ÷¶¼µÍÓÚ3±¸·Ýģʽ£¬ÓÉ´ËÎÒÃÇ¿ÉÒÔ¿´³ö£¬±à½âÂëÔËËãÓпÉÄܳÉΪHDFS¶ÁдÌõÐβ¼¾ÖÎļþµÄÆ¿¾±£¬¶øISA-L¶Ô±àÂëÆ÷µÄÓÅ»¯ÔòÏû³ýÁËÕâ¸öÆ¿¾±¡£
´ÓÉÏÊöµÄʵÑéÊý¾ÝºÍ·ÖÎö¿ÉÒÔ¿´³ö£¬Èç¹û¼¯ÈºÊǼܹ¹ÔÚÓ¢ÌØ¶ûƽ̨µÄ·þÎñÆ÷ÉÏ£¬ÄÇôʹÓÃÁËISA-LµÄ±à½âÂëÆ÷ÊÇ×îºÃµÄÑ¡Ôñ¡£
ÏîÄ¿½ø¶ÈÓë¼Æ»®
HDFS ECµÚÒ»½×¶ÎʵÏÖÁ˶ÔÌõÐβ¼¾ÖµÄÖ§³Ö¡£Óû§¿ÉÒÔ¶ÁºÍдһ¸öÌõÐβ¼¾ÖµÄÎļþ£¬Èç¹û·¢ÏÖÒ»¸öÄÚ²¿¿é¶ªÊ§£¬ºǫ́»á½øÐлָ´¹¤×÷¡£µÚÒ»½×¶Î´úÂëÒѾ½øÈëtrunk£¬²¢¼Æ»®ÔÚ2.9»ò3.0°æ±¾Öз¢²¼¡£µÚ¶þ½×¶ÎÎÒÃǽ«ÊµÏÖ¶ÔÁ¬Ðø²¼¾ÖµÄÖ§³Ö¡£µ±Ç°ÎÒÃǵıà½âÂëÆ÷ĬÈÏʹÓõÄReed-Solomon£¬½«À´»áÌí¼Ó¸ü¶àµÄ±à½âÂëÆ÷ÈçHitchHiker¡¢LRCµÈ¡£Óû§Ò²½«¿ÉÒÔÁé»îÅäÖÃÎļþËù¶ÔÓ¦µÄ±à½âÂëÆ÷¡£
×ܽá
½«¾ÀɾÂë¼¼ÊõÈÚÈëµ½HDFSÖУ¬¿ÉÒÔ±£Ö¤ÔÚͬµÈ£¨»òÕ߸ü¸ß£©¿É¿¿ÐÔµÄǰÌáÏ£¬½«´æ´¢ÀûÓÃÂÊÌá¸ßÁËÒ»±¶¡£Í¬ÑùµÄ¼¯ÈºÓû§¿ÉÒÔ´æ´¢Á½±¶µÄÊý¾Ý£¬Õ⽫´ó´ó¼õÉÙÓû§Ó²¼þ·½ÃæµÄ¿ªÏú¡£±à½âÂëÔËËãÒªÏûºÄ´óÁ¿µÄCPU×ÊÔ´£¬¶ø»ùÓÚÓ¢ÌØ¶ûISA-L¿âµÄ±à½âÂëÆ÷¼«´óµØÌá¸ßÁ˱à½âÂëÐÔÄÜ£¬´Ó¶øÊ¹µÃ±à½âÂëµÄ¼ÆËã²»ÔÙ³ÉΪƿ¾±¡£ |