å¼è¨
Hadoopåå¸å¼æ件系ç»(HDFS)被设计æéåè¿è¡å¨éç¨ç¡¬ä»¶(commodity hardware)ä¸çåå¸å¼æ件系ç»ãå®åç°æçåå¸å¼æ件系ç»æå¾å¤å ±åç¹ãä½åæ¶ï¼å®åå ¶ä»çåå¸å¼æ件系ç»çåºå«ä¹æ¯å¾ææ¾çãHDFSæ¯ä¸ä¸ªé«åº¦å®¹éæ§çç³»ç»ï¼éåé¨ç½²å¨å»ä»·çæºå¨ä¸ãHDFSè½æä¾é«ååéçæ°æ®è®¿é®ï¼é常éå大è§æ¨¡æ°æ®éä¸çåºç¨ãHDFSæ¾å®½äºä¸é¨åPOSIX约æï¼æ¥å®ç°æµå¼è¯»åæ件系ç»æ°æ®çç®çãHDFSå¨æå¼å§æ¯ä½ä¸ºApache Nutchæç´¢å¼æ项ç®çåºç¡æ¶æèå¼åçãHDFSæ¯Apache Hadoop Core项ç®çä¸é¨åãè¿ä¸ªé¡¹ç®çå°åæ¯http://hadoop.apache.org/core/ã
åæå设计ç®æ
硬件é误
硬件é误æ¯å¸¸æèä¸æ¯å¼å¸¸ãHDFSå¯è½ç±æç¾ä¸åçæå¡å¨æææï¼æ¯ä¸ªæå¡å¨ä¸åå¨çæ件系ç»çé¨åæ°æ®ãæ们é¢å¯¹çç°å®æ¯ææç³»ç»çç»ä»¶æ°ç®æ¯å·¨å¤§çï¼èä¸ä»»ä¸ç»ä»¶é½æå¯è½å¤±æï¼è¿æå³çæ»æ¯æä¸é¨åHDFSçç»ä»¶æ¯ä¸å·¥ä½çãå æ¤é误æ£æµåå¿«éãèªå¨çæ¢å¤æ¯HDFSææ ¸å¿çæ¶æç®æ ã
æµå¼æ°æ®è®¿é®
è¿è¡å¨HDFSä¸çåºç¨åæ®éçåºç¨ä¸åï¼éè¦æµå¼è®¿é®å®ä»¬çæ°æ®éãHDFSç设计ä¸æ´å¤çèèå°äºæ°æ®æ¹å¤çï¼èä¸æ¯ç¨æ·äº¤äºå¤çãæ¯ä¹æ°æ®è®¿é®çä½å»¶è¿é®é¢ï¼æ´å ³é®çå¨äºæ°æ®è®¿é®çé«ååéãPOSIXæ å设置çå¾å¤ç¡¬æ§çº¦æ对HDFSåºç¨ç³»ç»ä¸æ¯å¿ éçã为äºæé«æ°æ®çååéï¼å¨ä¸äºå ³é®æ¹é¢å¯¹POSIXçè¯ä¹åäºä¸äºä¿®æ¹ã
大è§æ¨¡æ°æ®é
è¿è¡å¨HDFSä¸çåºç¨å ·æå¾å¤§çæ°æ®éãHDFSä¸çä¸ä¸ªå ¸åæ件大å°ä¸è¬é½å¨Gåèè³Tåèãå æ¤ï¼HDFS被è°è以æ¯æ大æ件åå¨ãå®åºè¯¥è½æä¾æ´ä½ä¸é«çæ°æ®ä¼ è¾å¸¦å®½ï¼è½å¨ä¸ä¸ªé群éæ©å±å°æ°ç¾ä¸ªèç¹ãä¸ä¸ªåä¸çHDFSå®ä¾åºè¯¥è½æ¯ææ°ä»¥åä¸è®¡çæ件ã
ç®åçä¸è´æ§æ¨¡å
HDFSåºç¨éè¦ä¸ä¸ªâä¸æ¬¡åå ¥å¤æ¬¡è¯»åâçæ件访é®æ¨¡åãä¸ä¸ªæ件ç»è¿å建ãåå ¥åå ³éä¹åå°±ä¸éè¦æ¹åãè¿ä¸å设ç®åäºæ°æ®ä¸è´æ§é®é¢ï¼å¹¶ä¸ä½¿é«ååéçæ°æ®è®¿é®æ为å¯è½ãMap/Reduceåºç¨æè ç½ç»ç¬è«åºç¨é½é常éåè¿ä¸ªæ¨¡åãç®åè¿æ计åå¨å°æ¥æ©å è¿ä¸ªæ¨¡åï¼ä½¿ä¹æ¯ææ件çéå åæä½ã
â移å¨è®¡ç®æ¯ç§»å¨æ°æ®æ´åç®â
ä¸ä¸ªåºç¨è¯·æ±ç计ç®ï¼ç¦»å®æä½çæ°æ®è¶è¿å°±è¶é«æï¼å¨æ°æ®è¾¾å°æµ·é级å«çæ¶åæ´æ¯å¦æ¤ãå 为è¿æ ·å°±è½éä½ç½ç»é»å¡çå½±åï¼æé«ç³»ç»æ°æ®çååéãå°è®¡ç®ç§»å¨å°æ°æ®éè¿ï¼æ¯ä¹å°æ°æ®ç§»å¨å°åºç¨æå¨æ¾ç¶æ´å¥½ãHDFS为åºç¨æä¾äºå°å®ä»¬èªå·±ç§»å¨å°æ°æ®éè¿çæ¥å£ã
å¼æ软硬件平å°é´çå¯ç§»æ¤æ§
HDFSå¨è®¾è®¡çæ¶åå°±èèå°å¹³å°çå¯ç§»æ¤æ§ãè¿ç§ç¹æ§æ¹ä¾¿äºHDFSä½ä¸ºå¤§è§æ¨¡æ°æ®åºç¨å¹³å°çæ¨å¹¿ã
Namenode å Datanode
HDFSéç¨master/slaveæ¶æãä¸ä¸ªHDFSé群æ¯ç±ä¸ä¸ªNamenodeåä¸å®æ°ç®çDatanodesç»æãNamenodeæ¯ä¸ä¸ªä¸å¿æå¡å¨ï¼è´è´£ç®¡çæ件系ç»çåå空é´(namespace)以å客æ·ç«¯å¯¹æ件ç访é®ãé群ä¸çDatanodeä¸è¬æ¯ä¸ä¸ªèç¹ä¸ä¸ªï¼è´è´£ç®¡çå®æå¨èç¹ä¸çåå¨ãHDFSæ´é²äºæ件系ç»çåå空é´ï¼ç¨æ·è½å¤ä»¥æ件çå½¢å¼å¨ä¸é¢åå¨æ°æ®ãä»å é¨çï¼ä¸ä¸ªæä»¶å ¶å®è¢«åæä¸ä¸ªæå¤ä¸ªæ°æ®åï¼è¿äºååå¨å¨ä¸ç»Datanodeä¸ãNamenodeæ§è¡æ件系ç»çåå空é´æä½ï¼æ¯å¦æå¼ãå ³éãéå½åæ件æç®å½ãå®ä¹è´è´£ç¡®å®æ°æ®åå°å ·ä½Datanodeèç¹çæ å°ãDatanodeè´è´£å¤çæ件系ç»å®¢æ·ç«¯ç读å请æ±ãå¨Namenodeçç»ä¸è°åº¦ä¸è¿è¡æ°æ®åçå建ãå é¤åå¤å¶ã
NamenodeåDatanode被设计æå¯ä»¥å¨æ®éçåç¨æºå¨ä¸è¿è¡ãè¿äºæºå¨ä¸è¬è¿è¡çGNU/Linuxæä½ç³»ç»(OS)ãHDFSéç¨Javaè¯è¨å¼åï¼å æ¤ä»»ä½æ¯æJavaçæºå¨é½å¯ä»¥é¨ç½²NamenodeæDatanodeãç±äºéç¨äºå¯ç§»æ¤æ§æ强çJavaè¯è¨ï¼ä½¿å¾HDFSå¯ä»¥é¨ç½²å°å¤ç§ç±»åçæºå¨ä¸ãä¸ä¸ªå ¸åçé¨ç½²åºæ¯æ¯ä¸å°æºå¨ä¸åªè¿è¡ä¸ä¸ªNamenodeå®ä¾ï¼èé群ä¸çå ¶å®æºå¨åå«è¿è¡ä¸ä¸ªDatanodeå®ä¾ãè¿ç§æ¶æ并ä¸ææ¥å¨ä¸å°æºå¨ä¸è¿è¡å¤ä¸ªDatanodeï¼åªä¸è¿è¿æ ·çæ åµæ¯è¾å°è§ã
é群ä¸åä¸Namenodeçç»æ大大ç®åäºç³»ç»çæ¶æãNamenodeæ¯ææHDFSå æ°æ®ç仲è£è å管çè ï¼è¿æ ·ï¼ç¨æ·æ°æ®æ°¸è¿ä¸ä¼æµè¿Namenodeã
æ件系ç»çååç©ºé´ (namespace)
HDFSæ¯æä¼ ç»çå±æ¬¡åæ件ç»ç»ç»æãç¨æ·æè åºç¨ç¨åºå¯ä»¥å建ç®å½ï¼ç¶åå°æ件ä¿åå¨è¿äºç®å½éãæ件系ç»åå空é´çå±æ¬¡ç»æå大å¤æ°ç°æçæ件系ç»ç±»ä¼¼ï¼ç¨æ·å¯ä»¥å建ãå é¤ã移å¨æéå½åæ件ãå½åï¼HDFSä¸æ¯æç¨æ·ç£çé é¢å访é®æéæ§å¶ï¼ä¹ä¸æ¯æ硬é¾æ¥å软é¾æ¥ãä½æ¯HDFSæ¶æ并ä¸å¦¨ç¢å®ç°è¿äºç¹æ§ã
Namenodeè´è´£ç»´æ¤æ件系ç»çåå空é´ï¼ä»»ä½å¯¹æ件系ç»åå空é´æå±æ§çä¿®æ¹é½å°è¢«Namenodeè®°å½ä¸æ¥ãåºç¨ç¨åºå¯ä»¥è®¾ç½®HDFSä¿åçæ件çå¯æ¬æ°ç®ãæ件å¯æ¬çæ°ç®ç§°ä¸ºæ件çå¯æ¬ç³»æ°ï¼è¿ä¸ªä¿¡æ¯ä¹æ¯ç±Namenodeä¿åçã
æ°æ®å¤å¶
HDFS被设计æè½å¤å¨ä¸ä¸ªå¤§é群ä¸è·¨æºå¨å¯é å°åå¨è¶ 大æ件ãå®å°æ¯ä¸ªæ件åå¨æä¸ç³»åçæ°æ®åï¼é¤äºæåä¸ä¸ªï¼ææçæ°æ®åé½æ¯åæ ·å¤§å°çã为äºå®¹éï¼æ件çæææ°æ®åé½ä¼æå¯æ¬ãæ¯ä¸ªæ件çæ°æ®å大å°åå¯æ¬ç³»æ°é½æ¯å¯é ç½®çãåºç¨ç¨åºå¯ä»¥æå®æ个æ件çå¯æ¬æ°ç®ãå¯æ¬ç³»æ°å¯ä»¥å¨æ件å建çæ¶åæå®ï¼ä¹å¯ä»¥å¨ä¹åæ¹åãHDFSä¸çæ件é½æ¯ä¸æ¬¡æ§åå ¥çï¼å¹¶ä¸ä¸¥æ ¼è¦æ±å¨ä»»ä½æ¶ååªè½æä¸ä¸ªåå ¥è ã
Namenodeå ¨æ管çæ°æ®åçå¤å¶ï¼å®å¨ææ§å°ä»é群ä¸çæ¯ä¸ªDatanodeæ¥æ¶å¿è·³ä¿¡å·ååç¶ææ¥å(Blockreport)ãæ¥æ¶å°å¿è·³ä¿¡å·æå³ç该Datanodeèç¹å·¥ä½æ£å¸¸ãåç¶ææ¥åå å«äºä¸ä¸ªè¯¥Datanodeä¸æææ°æ®åçå表ã
å¯æ¬åæ¾: ææå¼å§çä¸æ¥
å¯æ¬çåæ¾æ¯HDFSå¯é æ§åæ§è½çå ³é®ãä¼åçå¯æ¬åæ¾çç¥æ¯HDFSåºåäºå ¶ä»å¤§é¨ååå¸å¼æ件系ç»çéè¦ç¹æ§ãè¿ç§ç¹æ§éè¦å大éçè°ä¼ï¼å¹¶éè¦ç»éªç积累ãHDFSéç¨ä¸ç§ç§°ä¸ºæºæ¶æç¥(rack-aware)ççç¥æ¥æ¹è¿æ°æ®çå¯é æ§ãå¯ç¨æ§åç½ç»å¸¦å®½çå©ç¨çãç®åå®ç°çå¯æ¬åæ¾çç¥åªæ¯å¨è¿ä¸ªæ¹åä¸ç第ä¸æ¥ãå®ç°è¿ä¸ªçç¥ççæç®æ æ¯éªè¯å®å¨ç产ç¯å¢ä¸çæææ§ï¼è§å¯å®çè¡ä¸ºï¼ä¸ºå®ç°æ´å è¿ççç¥æä¸æµè¯åç 究çåºç¡ã
大åHDFSå®ä¾ä¸è¬è¿è¡å¨è·¨è¶å¤ä¸ªæºæ¶ç计ç®æºç»æçé群ä¸ï¼ä¸åæºæ¶ä¸ç两å°æºå¨ä¹é´çé讯éè¦ç»è¿äº¤æ¢æºãå¨å¤§å¤æ°æ åµä¸ï¼åä¸ä¸ªæºæ¶å ç两å°æºå¨é´ç带宽ä¼æ¯ä¸åæºæ¶ç两å°æºå¨é´ç带宽大ã
éè¿ä¸ä¸ªæºæ¶æç¥çè¿ç¨ï¼Namenodeå¯ä»¥ç¡®å®æ¯ä¸ªDatanodeæå±çæºæ¶idãä¸ä¸ªç®åä½æ²¡æä¼åççç¥å°±æ¯å°å¯æ¬åæ¾å¨ä¸åçæºæ¶ä¸ãè¿æ ·å¯ä»¥ææé²æ¢å½æ´ä¸ªæºæ¶å¤±ææ¶æ°æ®ç丢失ï¼å¹¶ä¸å 许读æ°æ®çæ¶åå åå©ç¨å¤ä¸ªæºæ¶ç带宽ãè¿ç§çç¥è®¾ç½®å¯ä»¥å°å¯æ¬åååå¸å¨é群ä¸ï¼æå©äºå½ç»ä»¶å¤±ææ åµä¸çè´è½½åè¡¡ãä½æ¯ï¼å 为è¿ç§çç¥çä¸ä¸ªåæä½éè¦ä¼ è¾æ°æ®åå°å¤ä¸ªæºæ¶ï¼è¿å¢å äºåç代价ã
å¨å¤§å¤æ°æ åµä¸ï¼å¯æ¬ç³»æ°æ¯3ï¼HDFSçåæ¾çç¥æ¯å°ä¸ä¸ªå¯æ¬åæ¾å¨æ¬å°æºæ¶çèç¹ä¸ï¼ä¸ä¸ªå¯æ¬æ¾å¨åä¸æºæ¶çå¦ä¸ä¸ªèç¹ä¸ï¼æåä¸ä¸ªå¯æ¬æ¾å¨ä¸åæºæ¶çèç¹ä¸ãè¿ç§çç¥åå°äºæºæ¶é´çæ°æ®ä¼ è¾ï¼è¿å°±æé«äºåæä½çæçãæºæ¶çé误è¿è¿æ¯èç¹çé误å°ï¼æ以è¿ä¸ªçç¥ä¸ä¼å½±åå°æ°æ®çå¯é æ§åå¯ç¨æ§ãäºæ¤åæ¶ï¼å 为æ°æ®ååªæ¾å¨ä¸¤ä¸ªï¼ä¸æ¯ä¸ä¸ªï¼ä¸åçæºæ¶ä¸ï¼æ以æ¤çç¥åå°äºè¯»åæ°æ®æ¶éè¦çç½ç»ä¼ è¾æ»å¸¦å®½ãå¨è¿ç§çç¥ä¸ï¼å¯æ¬å¹¶ä¸æ¯åååå¸å¨ä¸åçæºæ¶ä¸ãä¸åä¹ä¸çå¯æ¬å¨ä¸ä¸ªèç¹ä¸ï¼ä¸åä¹äºçå¯æ¬å¨ä¸ä¸ªæºæ¶ä¸ï¼å ¶ä»å¯æ¬åååå¸å¨å©ä¸çæºæ¶ä¸ï¼è¿ä¸çç¥å¨ä¸æ害æ°æ®å¯é æ§å读åæ§è½çæ åµä¸æ¹è¿äºåçæ§è½ã
å½åï¼è¿éä»ç»çé»è®¤å¯æ¬åæ¾çç¥æ£å¨å¼åçè¿ç¨ä¸ã
å¯æ¬éæ©
为äºéä½æ´ä½ç带宽æ¶èå读å延æ¶ï¼HDFSä¼å°½é让读åç¨åºè¯»å离å®æè¿çå¯æ¬ãå¦æå¨è¯»åç¨åºçåä¸ä¸ªæºæ¶ä¸æä¸ä¸ªå¯æ¬ï¼é£ä¹å°±è¯»å该å¯æ¬ãå¦æä¸ä¸ªHDFSé群跨è¶å¤ä¸ªæ°æ®ä¸å¿ï¼é£ä¹å®¢æ·ç«¯ä¹å°é¦å 读æ¬å°æ°æ®ä¸å¿çå¯æ¬ã
å®å ¨æ¨¡å¼
Namenodeå¯å¨åä¼è¿å ¥ä¸ä¸ªç§°ä¸ºå®å ¨æ¨¡å¼çç¹æ®ç¶æãå¤äºå®å ¨æ¨¡å¼çNamenodeæ¯ä¸ä¼è¿è¡æ°æ®åçå¤å¶çãNamenodeä»ææç Datanodeæ¥æ¶å¿è·³ä¿¡å·ååç¶ææ¥åãåç¶ææ¥åå æ¬äºæ个Datanodeææçæ°æ®åå表ãæ¯ä¸ªæ°æ®åé½æä¸ä¸ªæå®çæå°å¯æ¬æ°ãå½Namenodeæ£æµç¡®è®¤æ个æ°æ®åçå¯æ¬æ°ç®è¾¾å°è¿ä¸ªæå°å¼ï¼é£ä¹è¯¥æ°æ®åå°±ä¼è¢«è®¤ä¸ºæ¯å¯æ¬å®å ¨(safely replicated)çï¼å¨ä¸å®ç¾åæ¯ï¼è¿ä¸ªåæ°å¯é ç½®ï¼çæ°æ®å被Namenodeæ£æµç¡®è®¤æ¯å®å ¨ä¹åï¼å ä¸ä¸ä¸ªé¢å¤ç30ç§çå¾ æ¶é´ï¼ï¼Namenodeå°éåºå®å ¨æ¨¡å¼ç¶æãæ¥ä¸æ¥å®ä¼ç¡®å®è¿æåªäºæ°æ®åçå¯æ¬æ²¡æè¾¾å°æå®æ°ç®ï¼å¹¶å°è¿äºæ°æ®åå¤å¶å°å ¶ä»Datanodeä¸ã
æ件系ç»å æ°æ®çæä¹ å
Namenodeä¸ä¿åçHDFSçåå空é´ã对äºä»»ä½å¯¹æ件系ç»å æ°æ®äº§çä¿®æ¹çæä½ï¼Namenodeé½ä¼ä½¿ç¨ä¸ç§ç§°ä¸ºEditLogçäºå¡æ¥å¿è®°å½ä¸æ¥ãä¾å¦ï¼å¨HDFSä¸å建ä¸ä¸ªæ件ï¼Namenodeå°±ä¼å¨Editlogä¸æå ¥ä¸æ¡è®°å½æ¥è¡¨ç¤ºï¼åæ ·å°ï¼ä¿®æ¹æ件çå¯æ¬ç³»æ°ä¹å°å¾Editlogæå ¥ä¸æ¡è®°å½ãNamenodeå¨æ¬å°æä½ç³»ç»çæ件系ç»ä¸åå¨è¿ä¸ªEditlogãæ´ä¸ªæ件系ç»çåå空é´ï¼å æ¬æ°æ®åå°æ件çæ å°ãæ件çå±æ§çï¼é½åå¨å¨ä¸ä¸ªç§°ä¸ºFsImageçæ件ä¸ï¼è¿ä¸ªæ件ä¹æ¯æ¾å¨Namenodeæå¨çæ¬å°æ件系ç»ä¸ã
Namenodeå¨å åä¸ä¿åçæ´ä¸ªæ件系ç»çåå空é´åæ件æ°æ®åæ å°(Blockmap)çæ åãè¿ä¸ªå ³é®çå æ°æ®ç»æ设计å¾å¾ç´§åï¼å èä¸ä¸ªæ4Gå åçNamenode足å¤æ¯æ大éçæ件åç®å½ãå½Namenodeå¯å¨æ¶ï¼å®ä»ç¡¬çä¸è¯»åEditlogåFsImageï¼å°ææEditlogä¸çäºå¡ä½ç¨å¨å åä¸çFsImageä¸ï¼å¹¶å°è¿ä¸ªæ°çæ¬çFsImageä»å åä¸ä¿åå°æ¬å°ç£çä¸ï¼ç¶åå é¤æ§çEditlogï¼å 为è¿ä¸ªæ§çEditlogçäºå¡é½å·²ç»ä½ç¨å¨FsImageä¸äºãè¿ä¸ªè¿ç¨ç§°ä¸ºä¸ä¸ªæ£æ¥ç¹(checkpoint)ãå¨å½åå®ç°ä¸ï¼æ£æ¥ç¹åªåçå¨Namenodeå¯å¨æ¶ï¼å¨ä¸ä¹ çå°æ¥å°å®ç°æ¯æå¨ææ§çæ£æ¥ç¹ã
Datanodeå°HDFSæ°æ®ä»¥æ件çå½¢å¼åå¨å¨æ¬å°çæ件系ç»ä¸ï¼å®å¹¶ä¸ç¥éæå ³HDFSæ件çä¿¡æ¯ãå®ææ¯ä¸ªHDFSæ°æ®ååå¨å¨æ¬å°æ件系ç»çä¸ä¸ªåç¬çæ件ä¸ãDatanode并ä¸å¨åä¸ä¸ªç®å½å建ææçæ件ï¼å®é ä¸ï¼å®ç¨è¯æ¢çæ¹æ³æ¥ç¡®å®æ¯ä¸ªç®å½çæä½³æ件æ°ç®ï¼å¹¶ä¸å¨éå½çæ¶åå建åç®å½ãå¨åä¸ä¸ªç®å½ä¸å建ææçæ¬å°æ件并ä¸æ¯æä¼çéæ©ï¼è¿æ¯å 为æ¬å°æ件系ç»å¯è½æ æ³é«æå°å¨å个ç®å½ä¸æ¯æ大éçæ件ãå½ä¸ä¸ªDatanodeå¯å¨æ¶ï¼å®ä¼æ«ææ¬å°æ件系ç»ï¼äº§çä¸ä¸ªè¿äºæ¬å°æ件对åºçææHDFSæ°æ®åçå表ï¼ç¶åä½ä¸ºæ¥ååéå°Namenodeï¼è¿ä¸ªæ¥åå°±æ¯åç¶ææ¥åã
é讯åè®®
ææçHDFSé讯åè®®é½æ¯å»ºç«å¨TCP/IPåè®®ä¹ä¸ã客æ·ç«¯éè¿ä¸ä¸ªå¯é ç½®çTCP端å£è¿æ¥å°Namenodeï¼éè¿ClientProtocolåè®®ä¸Namenode交äºãèDatanode使ç¨DatanodeProtocolåè®®ä¸Namenode交äºãä¸ä¸ªè¿ç¨è¿ç¨è°ç¨(RPC)模å被æ½è±¡åºæ¥å°è£ ClientProtocolåDatanodeprotocolåè®®ãå¨è®¾è®¡ä¸ï¼Namenodeä¸ä¼ä¸»å¨åèµ·RPCï¼èæ¯ååºæ¥èªå®¢æ·ç«¯æ Datanode çRPC请æ±ã
å¥å£®æ§
HDFSç主è¦ç®æ å°±æ¯å³ä½¿å¨åºéçæ åµä¸ä¹è¦ä¿è¯æ°æ®åå¨çå¯é æ§ã常è§çä¸ç§åºéæ åµæ¯ï¼Namenodeåºé, Datanodeåºéåç½ç»å²è£(network partitions)ã
ç£çæ°æ®é误ï¼å¿è·³æ£æµåéæ°å¤å¶
æ¯ä¸ªDatanodeèç¹å¨ææ§å°åNamenodeåéå¿è·³ä¿¡å·ãç½ç»å²è£å¯è½å¯¼è´ä¸é¨åDatanodeè·Namenode失å»èç³»ãNamenodeéè¿å¿è·³ä¿¡å·ç缺失æ¥æ£æµè¿ä¸æ åµï¼å¹¶å°è¿äºè¿æä¸ååéå¿è·³ä¿¡å·Datanodeæ 记为å®æºï¼ä¸ä¼åå°æ°çIO请æ±åç»å®ä»¬ãä»»ä½åå¨å¨å®æºDatanodeä¸çæ°æ®å°ä¸åææãDatanodeçå®æºå¯è½ä¼å¼èµ·ä¸äºæ°æ®åçå¯æ¬ç³»æ°ä½äºæå®å¼ï¼Namenodeä¸æå°æ£æµè¿äºéè¦å¤å¶çæ°æ®åï¼ä¸æ¦åç°å°±å¯å¨å¤å¶æä½ãå¨ä¸åæ åµä¸ï¼å¯è½éè¦éæ°å¤å¶ï¼æ个Datanodeèç¹å¤±æï¼æ个å¯æ¬éå°æåï¼Datanodeä¸ç硬çé误ï¼æè æ件çå¯æ¬ç³»æ°å¢å¤§ã
é群åè¡¡
HDFSçæ¶ææ¯ææ°æ®åè¡¡çç¥ãå¦ææ个Datanodeèç¹ä¸ç空é²ç©ºé´ä½äºç¹å®ç临çç¹ï¼æç §åè¡¡çç¥ç³»ç»å°±ä¼èªå¨å°å°æ°æ®ä»è¿ä¸ªDatanode移å¨å°å ¶ä»ç©ºé²çDatanodeãå½å¯¹æ个æ件ç请æ±çªç¶å¢å ï¼é£ä¹ä¹å¯è½å¯å¨ä¸ä¸ªè®¡åå建该æ件æ°çå¯æ¬ï¼å¹¶ä¸åæ¶éæ°å¹³è¡¡é群ä¸çå ¶ä»æ°æ®ãè¿äºåè¡¡çç¥ç®åè¿æ²¡æå®ç°ã
æ°æ®å®æ´æ§
ä»æ个Datanodeè·åçæ°æ®åæå¯è½æ¯æåçï¼æåå¯è½æ¯ç±Datanodeçåå¨è®¾å¤é误ãç½ç»é误æè 软件bugé æçãHDFS客æ·ç«¯è½¯ä»¶å®ç°äºå¯¹HDFSæ件å 容çæ ¡éªå(checksum)æ£æ¥ãå½å®¢æ·ç«¯å建ä¸ä¸ªæ°çHDFSæ件ï¼ä¼è®¡ç®è¿ä¸ªæ件æ¯ä¸ªæ°æ®åçæ ¡éªåï¼å¹¶å°æ ¡éªåä½ä¸ºä¸ä¸ªåç¬çéèæ件ä¿åå¨åä¸ä¸ªHDFSåå空é´ä¸ãå½å®¢æ·ç«¯è·åæ件å 容åï¼å®ä¼æ£éªä»Datanodeè·åçæ°æ®è·ç¸åºçæ ¡éªåæ件ä¸çæ ¡éªåæ¯å¦å¹é ï¼å¦æä¸å¹é ï¼å®¢æ·ç«¯å¯ä»¥éæ©ä»å ¶ä»Datanodeè·å该æ°æ®åçå¯æ¬ã
å æ°æ®ç£çé误
FsImageåEditlogæ¯HDFSçæ ¸å¿æ°æ®ç»æãå¦æè¿äºæ件æåäºï¼æ´ä¸ªHDFSå®ä¾é½å°å¤±æãå èï¼Namenodeå¯ä»¥é ç½®ææ¯æç»´æ¤å¤ä¸ªFsImageåEditlogçå¯æ¬ãä»»ä½å¯¹FsImageæè Editlogçä¿®æ¹ï¼é½å°åæ¥å°å®ä»¬çå¯æ¬ä¸ãè¿ç§å¤å¯æ¬çåæ¥æä½å¯è½ä¼éä½Namenodeæ¯ç§å¤ççåå空é´äºå¡æ°éãç¶èè¿ä¸ªä»£ä»·æ¯å¯ä»¥æ¥åçï¼å 为å³ä½¿HDFSçåºç¨æ¯æ°æ®å¯éçï¼å®ä»¬ä¹éå æ°æ®å¯éçãå½Namenodeéå¯çæ¶åï¼å®ä¼éåæè¿çå®æ´çFsImageåEditlogæ¥ä½¿ç¨ã
Namenodeæ¯HDFSé群ä¸çåç¹æ é(single point of failure)æå¨ãå¦æNamenodeæºå¨æ éï¼æ¯éè¦æ工干é¢çãç®åï¼èªå¨éå¯æå¨å¦ä¸å°æºå¨ä¸åNamenodeæ é转移çåè½è¿æ²¡å®ç°ã
å¿«ç §
å¿«ç §æ¯ææä¸ç¹å®æ¶å»çæ°æ®çå¤å¶å¤ä»½ãå©ç¨å¿«ç §ï¼å¯ä»¥è®©HDFSå¨æ°æ®æåæ¶æ¢å¤å°è¿å»ä¸ä¸ªå·²ç¥æ£ç¡®çæ¶é´ç¹ãHDFSç®åè¿ä¸æ¯æå¿«ç §åè½ï¼ä½è®¡åå¨å°æ¥ççæ¬è¿è¡æ¯æã
æ°æ®ç»ç»
æ°æ®å
HDFS被设计ææ¯æ大æ件ï¼éç¨HDFSçæ¯é£äºéè¦å¤ç大è§æ¨¡çæ°æ®éçåºç¨ãè¿äºåºç¨é½æ¯åªåå ¥æ°æ®ä¸æ¬¡ï¼ä½å´è¯»åä¸æ¬¡æå¤æ¬¡ï¼å¹¶ä¸è¯»åé度åºè½æ»¡è¶³æµå¼è¯»åçéè¦ãHDFSæ¯ææ件çâä¸æ¬¡åå ¥å¤æ¬¡è¯»åâè¯ä¹ãä¸ä¸ªå ¸åçæ°æ®å大å°æ¯64MBãå èï¼HDFSä¸çæ件æ»æ¯æç §64M被ååæä¸åçåï¼æ¯ä¸ªåå°½å¯è½å°åå¨äºä¸åçDatanodeä¸ã
Staging
客æ·ç«¯å建æ件ç请æ±å ¶å®å¹¶æ²¡æç«å³åéç»Namenodeï¼äºå®ä¸ï¼å¨åå¼å§é¶æ®µHDFS客æ·ç«¯ä¼å å°æ件æ°æ®ç¼åå°æ¬å°çä¸ä¸ªä¸´æ¶æ件ãåºç¨ç¨åºçåæä½è¢«éæå°éå®åå°è¿ä¸ªä¸´æ¶æ件ãå½è¿ä¸ªä¸´æ¶æ件累积çæ°æ®éè¶ è¿ä¸ä¸ªæ°æ®åç大å°ï¼å®¢æ·ç«¯æä¼èç³»NamenodeãNamenodeå°æ件åæå ¥æ件系ç»çå±æ¬¡ç»æä¸ï¼å¹¶ä¸åé ä¸ä¸ªæ°æ®åç»å®ãç¶åè¿åDatanodeçæ è¯ç¬¦åç®æ æ°æ®åç»å®¢æ·ç«¯ãæ¥ç客æ·ç«¯å°è¿åæ°æ®ä»æ¬å°ä¸´æ¶æ件ä¸ä¼ å°æå®çDatanodeä¸ãå½æä»¶å ³éæ¶ï¼å¨ä¸´æ¶æ件ä¸å©ä½ç没æä¸ä¼ çæ°æ®ä¹ä¼ä¼ è¾å°æå®çDatanodeä¸ãç¶å客æ·ç«¯åè¯Namenodeæ件已ç»å ³éãæ¤æ¶Namenodeæå°æ件å建æä½æ交å°æ¥å¿éè¿è¡åå¨ãå¦æNamenodeå¨æä»¶å ³éåå®æºäºï¼å该æ件å°ä¸¢å¤±ã
ä¸è¿°æ¹æ³æ¯å¯¹å¨HDFSä¸è¿è¡çç®æ åºç¨è¿è¡è®¤çèèåå¾å°çç»æãè¿äºåºç¨éè¦è¿è¡æ件çæµå¼åå ¥ãå¦æä¸éç¨å®¢æ·ç«¯ç¼åï¼ç±äºç½ç»é度åç½ç»å µå¡ä¼å¯¹åä¼°éé ææ¯è¾å¤§çå½±åãè¿ç§æ¹æ³å¹¶ä¸æ¯æ²¡æå ä¾çï¼æ©æçæ件系ç»ï¼æ¯å¦AFSï¼å°±ç¨å®¢æ·ç«¯ç¼åæ¥æé«æ§è½ã为äºè¾¾å°æ´é«çæ°æ®ä¸ä¼ æçï¼å·²ç»æ¾æ¾äºPOSIXæ åçè¦æ±ã
æµæ°´çº¿å¤å¶