Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
HDFS NameNodeÖØÆôÓÅ»¯
 
×÷ÕߣºÐ¡ÇÅ À´Ô´£ºÃÀÍż¼ÊõµãÆÀÖÐÐÄ ·¢²¼ÓÚ£º2017-5-26
  3595  次浏览      21
 

Ò»¡¢±³¾°

ÔÚHadoop¼¯ÈºÕû¸öÉúÃüÖÜÆÚÀÓÉÓÚµ÷Õû²ÎÊý¡¢Patch¡¢Éý¼¶µÈ¶àÖÖ³¡¾°ÐèҪƵ·±²Ù×÷NameNodeÖØÆô£¬²»ÂÛ²ÉÓúÎÖּܹ¹£¬ÖØÆôÆڼ伯ȺÕûÌå´æÔÚ¿ÉÓÃÐԺͿɿ¿ÐԵķçÏÕ£¬ËùÒÔÓÅ»¯NameNodeÖØÆô·Ç³£¹Ø¼ü¡£

±¾ÎÄ»ùÓÚHadoop-2.xºÍHA with QJMÉçÇø¼Ü¹¹ºÍϵͳÉè¼Æ£¨Èçͼ1Ëùʾ£©£¬Í¨¹ýÊáÀíNameNodeÖØÆôÁ÷³Ì£¬²¢ÔÚ´Ë»ù´¡ÉÏ£¬²ûÊö¶ÔNameNodeÖØÆôÓÅ»¯Êµ¼ù¡£

ͼ1 HDFS HA with QJM¼Ü¹¹Í¼Ê¾

¶þ¡¢NameNodeÖØÆôÁ÷³Ì

ÔÚHDFSµÄÕû¸öÔËÐÐÆÚÀËùÓÐÔªÊý¾Ý¾ùÔÚNameNodeµÄÄڴ漯ÖйÜÀí£¬µ«ÊÇÓÉÓÚÄÚ´æÒ×ʧÌØÐÔ£¬Ò»µ©³öÏÖ½ø³ÌÍ˳ö¡¢å´»úµÈÒì³£Çé¿ö£¬ËùÓÐÔªÊý¾Ý¶¼»á¶ªÊ§£¬¸øÕû¸öϵͳµÄÊý¾Ý°²È«»áÔì³É²»¿É»Ö¸´µÄÔÖÄÑ¡£ÎªÁ˸üºÃµÄÈÝ´íÄÜÁ¦£¬NameNode»áÖÜÆÚ½øÐÐCheckPoint£¬½«ÆäÖеÄÒ»²¿·ÖÔªÊý¾Ý£¨ÎļþϵͳµÄĿ¼Ê÷Namespace£©Ë¢µ½³Ö¾Ã»¯É豸ÉÏ£¬¼´¶þ½øÖÆÎļþFSImage£¬ÕâÑùµÄ»°¼´Ê¹NameNode³öÏÖÒì³£Ò²Äܴӳ־û¯É豸Éϻָ´ÔªÊý¾Ý£¬±£Ö¤ÁËÊý¾ÝµÄ°²È«¿É¿¿¡£

µ«ÊǽöÖÜÆÚ½øÐÐCheckPointÈÔÈ»ÎÞ·¨±£Ö¤ËùÓÐÊý¾ÝµÄ¿É¿¿£¬ÈçÇ°´ÎCheckPointÖ®ºóдÈëµÄÊý¾ÝÒÀÈ»´æÔÚ¶ªÊ§µÄÎÊÌ⣬ËùÒÔ½«Á½´ÎCheckPointÖ®¼ä¶ÔNamespaceд²Ù×÷ʵʱдÈëEditLogÎļþ£¬Í¨¹ýÕâÖÖ·½Ê½¿ÉÒÔ±£Ö¤HDFSÔªÊý¾ÝµÄ¾ø¶Ô°²È«¿É¿¿¡£

ÊÂʵÉÏ£¬³ýNamespaceÍ⣬NameNode»¹¹ÜÀí·Ç³£ÖØÒªµÄÔªÊý¾ÝBlocksMap£¬ÃèÊöÊý¾Ý¿éBlockÓëDataNode½ÚµãÖ®¼äµÄ¶ÔÓ¦¹Øϵ¡£NameNode²¢Ã»ÓжÔÕⲿ·ÖÔªÊý¾ÝͬÑù²Ù×÷³Ö¾Ã»¯£¬Ô­ÒòÊÇÿ¸öDataNodeÒѾ­³ÖÓÐÊôÓÚ×Ô¼º¹ÜÀíµÄBlock¼¯ºÏ£¬½«ËùÓÐDataNodeµÄBlock¼¯ºÏ»ã×ܺ󼴿ɹ¹Ôì³öÍêÕûBlocksMap¡£

HA with QJM¼Ü¹¹Ï£¬NameNodeµÄÕû¸öÖØÆô¹ý³ÌÖÐʼÖÕÒÔSBN£¨StandbyNameNode£©½ÇÉ«Íê³É¡£ÓëÇ°ÊöÁ÷³Ì¶ÔÓ¦£¬Æô¶¯¹ý³Ì·ÖÒÔϼ¸¸ö½×¶Î£º

¼ÓÔØFSImage£»

»Ø·ÅEditLog£»

Ö´ÐÐCheckPoint£¨·Ç±ØÐë²½Ö裬½áºÏʵ¼ÊÇé¿öºÍ²ÎÊýÈ·¶¨£¬ºóÐøÏêÊö£©£»

ÊÕ¼¯ËùÓÐDataNodeµÄ×¢²áºÍÊý¾Ý¿é»ã±¨¡£

ĬÈÏÇé¿öÏ£¬NameNode»á±£´æÁ½¸öFSImageÎļþ£¬Óë´Ë¶ÔÓ¦£¬Ò²»á±£´æ¶ÔÓ¦Á½´ÎCheckPointÖ®ºóµÄËùÓÐEditLogÎļþ¡£Ò»°ãÀ´Ëµ£¬NameNodeÖØÆôºó£¬Í¨¹ý¶ÔFSImageÎļþÃû³ÆÅжϣ¬Ñ¡Ôñ¼ÓÔØ×îеÄFSImageÎļþ¼°»Ø·Å¸ÃCheckPointÖ®ºóÉú³ÉµÄËùÓÐEditLog£¬Íê³Éºó¸ù¾Ý¼ÓÔصÄEditLogÖвÙ×÷ÌõÄ¿Êý¼°¾àÉÏ´ÎCheckPointʱ¼ä¼ä¸ô£¨ºóÐøÏêÊö£©È·¶¨ÊÇ·ñÐèÒªÖ´ÐÐCheckPoint£¬Ö®ºó½øÈëµÈ´ýËùÓÐDataNode×¢²áºÍÔªÊý¾Ý»ã±¨½×¶Î£¬µ±Õⲿ·ÖÊý¾ÝÊÕ¼¯Íê³Éºó£¬NameNodeµÄÖØÆôÁ÷³Ì½áÊø¡£

´ÓÏßÉÏNameNodeÀú´ÎÖØÆôʱ¼äÊý¾Ý¿´£¬¸÷½×¶ÎºÄʱռ±È»ù±¾½Ó½üÈçͼ2Ëùʾ¡£

ͼ2 NameNodeÖØÆô¸÷½×¶ÎºÄʱռ±È

¾­¹ýÓÅ»¯£¬ÔÚÔªÊý¾Ý×ÜÁ¿540M£¨Ä¿Â¼Ê÷240M£¬Êý¾Ý¿é300M£©£¬³¬¹ý4K¹æÄ£µÄ¼¯ÈºÉÏÖØÆôNameNode×Üʱ¼ä~35min£¬ÆäÖмÓÔØFSImageºÄʱ~15min£¬Ã뼶»Ø·ÅEditLog£¬Êý¾Ý¿é»ã±¨ºÄʱ~20min£¬»ù±¾Äܹ»Âú×ãÉú²ú»·¾³µÄÐèÇó¡£

2.1 ¼ÓÔØFSImage

ÈçÇ°Êö£¬FSImageÎļþ¼Ç¼ÁËHDFSÕû¸öĿ¼Ê÷NamespaceÏà¹ØµÄÔªÊý¾Ý¡£´ÓHadoop-2.4.0Æð£¬FSImage¿ªÊ¼²ÉÓÃGoogle Protobuf±àÂë¸ñʽÃèÊö£¨HDFS-5698£©£¬ÏêϸÃèÊöÎļþ¼ûfsimage.proto¡£¸ù¾ÝÃèÊöÎļþºÍʵÏÖÂß¼­£¬FSImageÎļþ¸ñʽÈçͼ3Ëùʾ¡£

ͼ3 FSImageÎļþ¸ñʽ

´Ófsimage.protoºÍFSImageÎļþ´æ´¢¸ñʽÈÝÒ׿´µ½£¬³ýÁ˱ØÒªµÄÎļþÍ·²¿Ð£Ñ飨MAGIC£©ºÍβ²¿ÎļþË÷Òý£¨FILESUMMARY£©Í⣬Ö÷Òª°üº¬ÒÔϺËÐÄÊý¾Ý£º

NS_INFO£¨NameSystemSection£©£º¼Ç¼HDFSÎļþϵͳµÄÈ«¾ÖÐÅÏ¢£¬°üÀ¨NameSystemµÄID£¬µ±Ç°ÒѾ­·ÖÅä³öÈ¥µÄ×î´óBlock IDÒÔ¼°Transaction IDµÈÐÅÏ¢£»

INODE£¨INodeSection£©£ºÕû¸öĿ¼Ê÷ËùÓнڵãÊý¾Ý£¬°üÀ¨ INodeFile/INodeDirectory/INodeSymlink µÈËùÓÐÀàÐͽڵãµÄÊôÐÔÊý¾Ý£¬ÆäÖмǼÁËÈç½ÚµãID£¬½ÚµãÃû³Æ£¬·ÃÎÊȨÏÞ£¬´´½¨ºÍ·ÃÎÊʱ¼äµÈµÈÐÅÏ¢£»

INODE_DIR£¨INodeDirectorySection£©£ºÕû¸öĿ¼Ê÷ÖÐËùÓнڵãÖ®¼äµÄ¸¸×Ó¹Øϵ£¬ÅäºÏINODE¿É¹¹½¨ÍêÕûµÄĿ¼Ê÷£»

FILES_UNDERCONSTRUCTION £¨FilesUnderConstructionSection£©£ºÉÐδÍê³ÉдÈëµÄÎļþ¼¯ºÏ£¬Ö÷ҪΪÖØÆôʱÖؽ¨Lease¼¯ºÏ£»

SNAPSHOT£¨SnapshotSection£©£º¼Ç¼SnapshotÊý¾Ý£¬¿ìÕÕÊÇHadoop 2.1.0ÒýÈëµÄÐÂÌØÐÔ£¬ÓÃÓÚÊý¾Ý±¸·Ý¡¢»Ø¹ö£¬ÒÔ·ÀÖ¹ÒòÓû§Îó²Ù×÷µ¼Ö¼¯Èº³öÏÖÊý¾ÝÎÊÌ⣻

SNAPSHOT_DIFF£¨ SnapshotDiffSection£©£ºÖ´ÐпìÕÕ²Ù×÷µÄĿ¼/ÎļþµÄDiff¼¯ºÏÊý¾Ý£¬ÓëSNAPSHOTÒ»Æð¹¹½¨½ÏÍêÕûµÄ¿ìÕÕ¹ÜÀíÄÜÁ¦£»

SECRET_MANAGER £¨SecretManagerSection£©£º¼Ç¼DelegationKe yºÍ DelegationTokenÊý¾Ý£¬¸ù¾ÝDelegationKey¼°ÓÉDelegationToken¹¹Ôì³öµÄDelegationTokenIdentifier·½±ã½øÒ»²½¼ÆËãÃÜÂ룬ÒÔÉÏÊý¾Ý¿ÉÒÔÍêÉÆËùÓкϷ¨Token¼¯ºÏ£»

CACHE_MANAGER£¨CacheManagerSection£©£º¼¯ÖÐʽ»º´æÌØÐÔÈ«¾ÖÐÅÏ¢£¬¼¯ÖÐʽ»º´æÌØÐÔÊÇHadoop-2.3.0ΪÌáÉýÊý¾Ý¶ÁÐÔÄÜÒýÈëµÄÐÂÌØÐÔ£»

STRING_TABLE£¨StringTableSection£©£º×Ö·û´®µ½IDµÄÓ³Éä±í£¬Î¬»¤Ä¿Â¼/ÎļþµÄPermission×Ö·ûµ½IDµÄÓ³É䣬½ÚÊ¡´æ´¢¿Õ¼ä¡£

NameNodeÖ´ÐÐCheckPointʱ£¬×ñÑ­Protobuf¶¨Òå¼°ÉÏÊöÎļþ¸ñʽÃèÊö£¬ÖØÆô¼ÓÔØFSImageʱ£¬Í¬Ñù°´ÕÕProtobuf¶¨ÒåµÄ¸ñʽ´ÓÎļþÁ÷ÖжÁ³öÏàÓ¦Êý¾Ý¹¹½¨Õû¸öĿ¼Ê÷Namespace¼°ÆäËûÔªÊý¾Ý¡£½«FSImageÎļþ´Ó³Ö¾Ã»¯É豸¼ÓÔص½ÄÚ´æ²¢¹¹½¨³öĿ¼Ê÷½á¹¹ºó£¬Êµ¼ÊÉϲ¢Ã»ÓÐÍêÈ«»Ö¸´ÔªÊý¾Ýµ½×îÐÂ״̬£¬ÒòΪÿ´ÎCheckPointÖ®ºó»¹¿ÉÄÜ´æÔÚ´óÁ¿HDFSд²Ù×÷¡£

2.2 »Ø·ÅEditLog

NameNodeÔÚÏìÓ¦¿Í»§¶ËµÄдÇëÇóÇ°£¬»áÊ×ÏȸüÐÂÄÚ´æÏà¹ØÔªÊý¾Ý£¬È»ºóÔÙ°ÑÕâЩ²Ù×÷¼Ç¼ÔÚEditLogÎļþÖУ¬¿ÉÒÔ¿´µ½ÄÚ´æ״̬ʵ¼ÊÉÏÒª±ÈEditLogÊý¾Ý¸ü¼°Ê±¡£

¼Ç¼ÔÚEditLogÖ®ÖеÄÿ¸ö²Ù×÷ÓÖ³ÆΪһ¸öÊÂÎñ£¬¶ÔÓ¦Ò»¸öÕûÊýÐÎʽµÄÊÂÎñ±àºÅ¡£ÔÚµ±Ç°ÊµÏÖÖжà¸öÊÂÎñ×é³ÉÒ»¸öSegment£¬Éú³É¶ÀÁ¢µÄEditLogÎļþ£¬ÆäÖÐÎļþÃû³Æ±ê¼ÇÁËÆðÖ¹µÄÊÂÎñ±àºÅ£¬ÕýÔÚдÈëµÄEditLogÎļþ½ö±ê¼ÇÆðʼÊÂÎñ±àºÅ¡£EditLogÎļþµÄ¸ñʽ·Ç³£¼òµ¥£¬Ã»ÔÙͨ¹ýGoogle ProtobufÃèÊö£¬Îļþ¸ñʽÈçͼ4Ëùʾ¡£

ͼ4 EditLogÎļþ¸ñʽ

Ò»¸öÍêÕûµÄEditLogÎļþ°üÀ¨Ëĸö²¿·ÖÄÚÈÝ£¬·Ö±ðÊÇ£º

LAYOUTVERSION£º°æ±¾ÐÅÏ¢£»

OP_START_LOG_SEGMENT£º±êʶÎļþ¿ªÊ¼£»

RECORD£ºË³ÐòÖð¸ö¼Ç¼HDFSд²Ù×÷µÄÊÂÎñÄÚÈÝ£»

OP_END_LOG_SEGMENT£º±ê¼ÇÎļþ½áÊø¡£

NameNode¼ÓÔØFSImageÍê³Éºó£¬¼´¿ªÊ¼¶Ô¸ÃFSImageÎļþÖ®ºó£¨Í¨¹ý±È½ÏFSImageÎļþÃû³ÆÖаüº¬µÄÊÂÎñ±àºÅÓëEditLogÎļþÃû³ÆµÄÆðʼÊÂÎñ±àºÅ´óСȷ¶¨£©Éú³ÉµÄËùÓÐEditLogÑϸñ°´ÕÕÊÂÎñ±àºÅ´ÓСµ½´óÖð¸ö×ñÑ­ÉÏÊöµÄ¸ñʽ½øÐÐÿһ¸öHDFSд²Ù×÷ÊÂÎñ»Ø·Å¡£

NameNode¼ÓÔØÍêËùÓбØÐèµÄEditLogÎļþÊý¾Ýºó£¬ÄÚ´æÖеÄĿ¼Ê÷¼´»Ö¸´µ½ÁË×îÐÂ״̬¡£

2.3 DataNode×¢²á»ã±¨

¾­¹ýÇ°ÃæÁ½¸ö²½Ö裬Ö÷ÒªµÄÔªÊý¾Ý±»¹¹½¨£¬HDFSµÄÕû¸öĿ¼Ê÷±»ÍêÕû½¨Á¢£¬µ«ÊDz¢Ã»ÓÐÕÆÎÕÊý¾Ý¿éBlockÓëDataNodeÖ®¼äµÄ¶ÔÓ¦¹ØϵBlocksMap£¬ÉõÖÁ¶ÔDataNodeµÄÇé¿ö¶¼²»ÕÆÎÕ£¬ËùÒÔÐèÒªµÈ´ýDataNode×¢²á£¬²¢Íê³É¶Ô´ÓDataNode»ã±¨ÉÏÀ´µÄÊý¾Ý¿é»ã×Ü¡£´ý»ã×ܵÄÊý¾ÝÁ¿´ïµ½Ô¤Éè±ÈÀý£¨dfs.namenode.safemode.threshold-pct£©ºóÍ˳öSafemode¡£

NameNodeÖØÆô¾­¹ý¼ÓÔØFSImageºÍ»Ø·ÅEditLogºó£¬ËùÓÐDataNode²»¹Ü½ø³ÌÊÇ·ñ·¢Éú¹ýÖØÆô£¬¶¼±ØÐë¾­¹ýÒÔÏÂÁ½¸ö²½Ö裺

DataNodeÖØÐÂ×¢²áRegisterDataNode£»

DataNode»ã±¨ËùÓÐÊý¾Ý¿éBlockReport¡£

¶ÔÓÚ½Úµã¹æÄ£½Ï´óºÍÔªÊý¾ÝÁ¿½Ï´óµÄ¼¯Èº£¬Õâ¸ö½×¶ÎµÄºÄʱ»á·Ç³£¿É¹Û¡£Ö÷ÒªÓÐÈýµãÔ­Òò£º

´¦ÀíBlockReportµÄÂß¼­±È½Ï¸´ÔÓ£¬Ïà¶ÔÆäËûRPC²Ù×÷ºÄʱ½Ï³¤¡£Í¼5¶Ô±ÈÁËBlockReportºÍAddBlockÁ½ÖÖ²»Í¬RPCµÄ´¦Àíʱ¼ä£¬¾¡¹ÜAddBlock²Ù×÷Ò²Ïà¶Ô¸´ÔÓ£¬µ«ÊǶԱÈÀ´¿´£¬BlockReportµÄ´¦Àíʱ¼äÏÔÖø¸ßÓÚAddBlock´¦Àíʱ¼ä£»

NameNode¶Ôÿһ¸öBlockReportµÄRPCÇëÇó´¦Àí¶¼ÐèÒª³ÖÓÐÈ«¾ÖËø£¬Ò²¾ÍÊÇ˵¶ÔÓÚBlockReportÀàÐÍRPCÇëÇóʵ¼ÊÉÏÊÇ´®Ðд¦Àí£»

NameNodeÖØÆôʱËùÓÐDataNode¼¯ÖÐÔÚͬһʱ¼ä¶Î½øÐÐBlockReportÇëÇó¡£

ͼ5 BlockReportºÍAddBlockÁ½¸öRPC´¦Àíʱ¼ä¶Ô±È

֮ǰÎÒÃÇÔÚNameNodeÄÚ´æÈ«¾°Ò»ÎÄÖÐÏêϸÃèÊö¹ýBlockÔÚNameNodeÔªÊý¾ÝÖеĹؼü×÷Óü°ÓëNamespace/DataNode/BlocksMapµÄ¸´ÔÓ¹Øϵ£¬´ÓÖÐÒ²¿ÉÒÔ¿´³ö£¬Ã¿¸öÐÂÔöBlockÐèҪά»¤¶à¸ö¹Øϵ£¬¸üºÎ¿öÖØÆô¹ý³ÌÖÐËùÓÐBlock¶¼ÐèÒª½¨Á¢Í¬Ñù¸´ÔÓ¹Øϵ£¬ËùÒÔºÄʱÏà¶Ô½Ï¸ß¡£

Èý¡¢ÖØÆôÓÅ»¯

¸ù¾ÝÇ°Ãæ¶ÔNameNodeÖØÆô¹ý³ÌµÄ¼òµ¥ÊáÀí£¬ÔÚ¸÷¸ö½×¶Î¿ÉÒÔÊʵ±µÄʵʩÓÅ»¯ÒÔ¼Ó¿ìNameNodeÖØÆô¹ý³Ì¡£

HDFS-7097 ½â¾öÖØÆô¹ý³ÌÖÐSBNÖ´ÐÐCheckPointʱ²»ÄÜ´¦ÀíBlockReportÇëÇóµÄÎÊÌâ

Fix£º2.7.0

Hadoop-2.7.0°æ±¾Ç°£¬SBN£¨StandbyNameNode£©ÔÚÖ´ÐÐCheckPoint²Ù×÷Ç°»áÏÈ»ñµÃÈ«¾Ö¶ÁдËøfsLock£¬ÔÚ´ËÆڼ䣬BlockReportÇëÇóÓÉÓÚ²»ÄÜ»ñµÃÈ«¾ÖдËø»á³ÖÐø´¦Óڵȴý״̬£¬Ö±µ½CheckPointÍê³ÉºóÊÍ·ÅÁËfsLockËøºó²ÅÄܼÌÐø¡£NameNodeÖØÆôµÄµÚÈý¸ö½×¶Î£¬Í¬Ñù´æÔÚÕâÖÖÇé¿ö¡£¶øÇÒ¶ÔÓÚ¹æÄ£½Ï´óµÄ¼¯Èº£¬Ã¿´ÎCheckPointʱ¼äÔÚ·ÖÖÓ¼¶±ð£¬¶ÔÕû¸öÖØÆô¹ý³ÌÓ°Ïì·Ç³£´ó¡£Êµ¼ÊÉÏ£¬CheckPointÊǶÔĿ¼Ê÷µÄ³Ö¾Ã»¯²Ù×÷£¬²¢²»Éæ¼°BlocksMapÊý¾Ý½á¹¹£¬ËùÒÔCheckPointÆÚ¼äÊÇ¿ÉÒÔÈÃBlockReportÇëÇóÖ±½Óͨ¹ý£¬ÕâÑù¿ÉÒÔ½ÚÊ¡ÆÚ¼äBlockReportÅŶӵȴý´øÀ´µÄʱ¼ä¿ªÏú£¬HDFS-7097ÕýÊǽ«ËøÁ£¶È·ÅС½â¾öÁËCheckPoint¹ý³Ì²»ÄÜ´¦ÀíBlockReportÀàÐÍRPCÇëÇóµÄÎÊÌâ¡£

ÓëHDFS-7097Ïà¶Ô£¬ÁíÒ»ÖÖ˼·ҲֵµÃ½è¼ø£¬¾ÍÊÇÖØÆô¹ý³Ì¾¡¿ÉÄܱÜÃâ³öÏÖCheckPoint¡£´¥·¢CheckPointÓÐÁ½ÖÖÇé¿ö£ºÊ±¼äÖÜÆÚ»òHDFSд²Ù×÷ÊÂÎñÊý£¬·Ö±ðͨ¹ý²ÎÊý dfs.namenode.checkpoint.period ºÍ dfs.namenode.checkpoint.txns ¿ØÖÆ£¬Ä¬ÈÏÖµ·Ö±ðÊÇ3600sºÍ1,000,000£¬¼´Ä¬ÈÏÇé¿öÏÂÒ»¸öСʱ»òÕßд²Ù×÷µÄÊÂÎñÊý³¬¹ý1,000,000´¥·¢Ò»´ÎCheckPoint¡£ÎªÁ˱ÜÃâÔÚÖØÆô¹ý³ÌÖÐƵ·±Ö´ÐÐCheckPoint£¬¿ÉÒÔÊʵ±µ÷´ódfs.namenode.checkpoint.txns£¬½¨ÒéÖµ10,000,000 ~ 20,000,000£¬´øÀ´µÄÓ°ÏìÊÇEditLogÎļþÀۼƵĸöÊý»áÉÔÓÐÔö¼Ó¡£´Óʵ¼ù¾­ÑéÉÏ¿´£¬¶ÔÒ»¸öÓÐÒÚ¼¶±ðÔªÊý¾ÝÁ¿µÄNameNode£¬»Ø·ÅÒ»¸öEditLogÎļþ£¨Ä¬ÈÏ1,000,000д²Ù×÷ÊÂÎñ£©Ê±¼äÔÚÃ뼶£¬µ«ÊÇÖ´ÐÐÒ»´ÎCheckPointʱ¼äͨ³£ÔÚ·ÖÖÓ¼¶±ð£¬×ÛºÏȨºâ¼õÉÙCheckPoint´ÎÊýºÍÔö¼ÓEditLogÎļþÊýÊÕÒæ±È½ÏÃ÷ÏÔ¡£

HDFS-6763 ½â¾öSBNÿ¼ä¸ô1minÈ«¾Ö¼ÆËãºÍÑéÖ¤QuotaÖµµ¼Ö½ø³ÌHangסÊýÃëµÄÎÊÌâ

Fix£º2.8.0

ANN£¨ActiveNameNode£©½«HDFSд²Ù×÷ʵʱдÈëJNµÄEditLogÎļþ£¬ÎªÍ¬²½Êý¾Ý£¬SBNĬÈϼä¸ô1min´ÓJNÀ­È¡Ò»´ÎEditLogÎļþ²¢½øÐлطţ¬Íê³ÉºóÖ´ÐÐÈ«¾ÖQuota¼ì²éºÍ¼ÆË㣬µ±Namespace¹æÄ£±ä´óºó£¬È«¾Ö¼ÆËãºÍ¼ì²éQuota»á·Ç³£ºÄʱ£¬ÔÚ´ËÆڼ䣬Õû¸öSBNµÄNamenode½ø³Ì»á±»Hangס£¬ÒÔÖÁÓÚ°üÀ¨DNÐÄÌøºÍBlockReportÔÚÄÚµÄËùÓÐRPCÇëÇ󶼲»Äܼ°Ê±´¦Àí¡£NameNodeÖØÆô¹ý³ÌÖÐÕâ¸öÎÊÌâÓ°ÏìÍ»³ö¡£

ʵ¼ÊÉÏ£¬SBNÔÚEditLog Tailer½×¶Î¼ÆËãºÍ¼ì²éQuotaÍêȫûÓбØÒª£¬HDFS-6763½«Õâ¶Î´¦ÀíÂß¼­ºóÒƵ½Ö÷´ÓÇл»Ê±½øÐУ¬½â¾öSBN½ø³Ì¼ä¸ô1min±»HangסµÄÎÊÌâ¡£

´ÓÓÅ»¯Ð§¹ûÉÏ¿´£¬¶ÔÒ»¸öÓµÓнӽüÎåÒÚÔªÊý¾ÝÁ¿£¬ÆäÖÐÁ½ÒÚÊý¾Ý¿éµÄNameNode£¬ÓÅ»¯Ç°Êý¾Ý¿é»ã±¨½×¶ÎºÄʱ~30min£¬ÆäÖд¥·¢³¬¹ý20´ÎÓÉÓÚ¼ÆËãºÍ¼ì²éQuotaµ¼Ö½ø³ÌHangס~20sµÄÇé¿ö£¬Õû¸öBlockReport½×¶Î´æÔÚ³¬¹ý5minÎÞЧʱ¼ä¿ªÏú£¬ÓÅ»¯ºó¿Éµ½~25min¡£

HDFS-7980 ¼ò»¯Ê×´ÎBlockReport´¦ÀíÂß¼­ÓÅ»¯ÖØÆôʱ¼ä

Fix£º2.7.1

NameNode¼ÓÔØÍêÔªÊý¾Ýºó£¬ËùÓÐDataNode³¢ÊÔ¿ªÊ¼½øÐÐÊý¾Ý¿é»ã±¨£¬Èç¹û»ã±¨µÄÊý¾Ý¿éÏà¹ØÔªÊý¾Ý»¹Ã»ÓмÓÔØ£¬ÏÈÔÝ´æÏûÏ¢¶ÓÁУ¬µ±NameNodeÍê³É¼ÓÔØÏà¹ØÔªÊý¾Ýºó£¬ÔÙ´¦Àí¸ÃÏûÏ¢¶ÓÁС£¶ÔµÚÒ»´Î¿é»ã±¨µÄ´¦Àí±È½ÏÌرð£¨NameNodeÖØÆôºó£¬ËùÓÐDataNodeµÄBlockReport¶¼»á±»±ê¼Ç³ÉÊ×´ÎÊý¾Ý¿é»ã±¨£©£¬ÎªÌá¸ß´¦ÀíËٶȣ¬½öÑéÖ¤¿éÊÇ·ñË𻵣¬Ö®ºóÅжϿé״̬ÊÇ·ñΪFINALIZED£¬ÈôÊǽ¨Á¢Êý¾Ý¿éÓëDataNodeµÄÓ³Éä¹Øϵ£¬½¨Á¢ÓëĿ¼Ê÷ÖÐÎļþµÄ¹ØÁª¹Øϵ£¬ÆäËûÐÅÏ¢Ò»¸ÅÔݲ»´¦Àí¡£¶ÔÓڷdzõ´ÎÊý¾Ý¿é»ã±¨£¬´¦ÀíÂß¼­Òª¸´ÔӺܶ࣬¶Ô±¨¸æµÄÿ¸öÊý¾Ý¿é£¬²»½ö¼ì²éÊÇ·ñË𻵣¬ÊÇ·ñΪFINALIZED״̬£¬»¹»á¼ì²éÊÇ·ñÎÞЧ£¬ÊÇ·ñÐèҪɾ³ý£¬ÊÇ·ñΪUC״̬µÈµÈ£»Ñé֤ͨ¹ýºó½¨Á¢Êý¾Ý¿éÓëDataNodeµÄÓ³Éä¹Øϵ£¬½¨Á¢ÓëĿ¼Ê÷ÖÐÎļþµÄ¹ØÁª¹Øϵ¡£

³õ´ÎÊý¾Ý¿é»ã±¨µÄ´¦ÀíÂß¼­¶ÀÁ¢³öÀ´£¬Ö÷ÒªÔ­ÒòÓÐÁ½·½Ã棺

¼Ó¿ìNameNodeµÄÆô¶¯Ê±¼ä£»²âÊÔÊý¾ÝÏÔʾº¬~500MÔªÊý¾ÝµÄNameNodeÔÚ´¦Àí800K¸öÊý¾Ý¿éµÄ³õ´Î¿é»ã±¨µÄ´¦Àíʱ¼ä±ÈÕý³£¿é»ã±¨µÄ´¦Àíʱ¼ä¿É½µµÍÒ»¸öÊýÁ¿¼¶£»

Æô¶¯¹ý³ÌÖУ¬²»ÌṩÕý³£¶Áд·þÎñ£¬ËùÒÔֻҪȷ±£Õý³£Êý¾Ý£¨Õû¸öNamespaceºÍËùÓÐFINALIZED״̬Blocks£©ÎÞÎó£¬ÎÞЧºÍÈßÓàÊý¾Ý´¦ÀíÍêÈ«¿ÉÒÔÑÓºóµ½IBR£¨IncrementalBlockReport£©»òÏ´ÎBR£¨BlockReport£©¡£

Õâ±¾À´ÊǷdz£ºÏÀíºÍÕý³£µÄÉè¼ÆÂß¼­£¬µ«ÊÇʵÏÖʱNameNodeÔÚÅжÏÊÇ·ñΪÊ×´ÎÊý¾Ý¿é¿é»ã±¨µÄÂß¼­Ò»Ö±´æÔÚÎÊÌ⣬µ¼ÖÂÕâ¶Î·Ç³£ºÃµÄ¸Ä½øµãÂß¼­Êµ¼ÊÉϳ¤ÆÚ²¢Î´ÕæÕýÖ´Ðе½£¬Ö±µ½HDFS-7980ÔÚHadoop-2.7.1ÐÞ¸´¸ÃÎÊÌâ¡£HDFS-7980µÄÓÅ»¯Ð§¹û·Ç³£Ã÷ÏÔ£¬²âÊÔÏÔʾ£¬¶Ôº¬80K BlocksµÄBlockReport RPCÇëÇóµÄ´¦Àíʱ¼ä´Ó~500ms¿ÉÓÅ»¯µ½~100ms£¬´ÓÖØÆôÆÚÕû¸öBlockReport½×¶Î¿´£¬ÔÚ³¬¹ý600MÔªÊý¾Ý£¬ÆäÖÐ300MÊý¾Ý¿éµÄNameNodeÏÔʾ¸Ã½×¶Î´Ó~50minÓÅ»¯µ½~25min¡£

HDFS-7503 ½â¾öÖØÆôÇ°´óɾ³ý²Ù×÷»áÔì³ÉÖØÆôºóËøÄÚдÈÕÖ¾½µµÍ´¦ÀíÄÜÁ¦

Fix£º2.7.0

ÈôNameNodeÖØÆôÇ°²úÉú¹ý´óɾ³ý²Ù×÷£¬µ±NameNode¼ÓÔØÍêFSImage²¢»Ø·ÅÁËËùÓÐEditLog¹¹½¨Æð×îÐÂĿ¼Ê÷½á¹¹ºó£¬ÔÚ´¦ÀíDataNodeµÄBlockReportʱ£¬»á·¢ÏÖÓдóÁ¿Block²»ÊôÓÚÈκÎÎļþ£¬Hadoop-2.7.0°æ±¾Ç°£¬¶ÔÓÚÕâÀàÇé¿öµÄÊä³öÈÕÖ¾Âß¼­ÔÚÈ«¾ÖËøÄÚ£¬ÓÉÓÚ´æÔÚ´óÁ¿IO²Ù×÷µÄºÄʱ£¬»áÑÏÖØÀ­³¤´¦ÀíBlockReportµÄ´¦Àíʱ¼ä£¬Ó°ÏìNameNodeÖØÆôʱ¼ä¡£HDFS-7503µÄ½â¾ö°ì·¨·Ç³£¼òµ¥£¬°ÑÈÕÖ¾Êä³öÂß¼­ÒƳöÈ«¾ÖËøÍâ¡£ÏßÉÏЧ¹ûÉÏ¿´¶ÔͬÀೡ¾°ÓÅ»¯±È½ÏÃ÷ÏÔ£¬²»¹ýÈç¹ûÖØÆôÇ°²»´¥·¢´óµÄɾ³ý²Ù×÷Ó°Ïì²»´ó¡£

·ÀÖ¹Èȱ¸½ÚµãSBN£¨StandbyNameNode£©/À䱸½ÚµãSNN£¨SecondaryNameNode£©³¤Ê±¼äδÕý³£ÔËÐжѻý´óÁ¿EditlogÍÏÂýNameNodeÖØÆôʱ¼ä

Ñ¡ÔñHAÈȱ¸·½°¸SBN£¨StandbyNameNode£©»¹ÊÇÀ䱸·½°¸SNN£¨SecondaryNameNode£©¼Ü¹¹£¬Ö´ÐÐCheckPointµÄÂß¼­¼¸ºõÒ»Ö£¬Èçͼ6Ëùʾ¡£Èç¹ûSBN/SNN·þÎñ³¤Ê±¼äδÕý³£ÔËÐУ¬CheckPoint²»ÄÜ°´ÕÕÔ¤ÆÚÖ´ÐУ¬ÕâÑù»á»ýѹ´óÁ¿EditLog¡£»ýѹµÄEditLogÎļþÔ½¶à£¬ÖØÆôNameNodeÐèÒª¼ÓÔØEditLogʱ¼äÔ½³¤¡£ËùÒÔ¾¡¿ÉÄܱÜÃâ³öÏÖSNN/SBN³¤Ê±¼äδÕý³£·þÎñµÄ״̬¡£

ͼ6 CheckPointÁ÷³Ì

ÔÚÒ»¸öÓÐ500MÔªÊý¾ÝµÄNameNodeÉϲâÊÔ¼ÓÔØÒ»¸ö200K´ÎHDFSÊÂÎñ²Ù×÷µÄEditLogÎļþºÄʱ~5s£¬°´ÕÕĬÈÏ2minµÄEditLog¹ö¶¯ÖÜÆÚ£¬Èç¹ûÒ»ÖÜʱ¼äSBN/SNNδÄÜÕý³£¹¤×÷£¬Ôò»áÀÛ»ý~5K¸öEditLogÎļþ£¬´ËºóÒ»µ©·¢ÉúNameNodeÖØÆô£¬½ö¼ÓÔØEditLogÎļþµÄʱ¼ä¾ÍÐèÒª~7h£¬Ò²¾ÍÊÇÕû¸ö¼¯Èº´æÔÚ³¬¹ý7h²»¿ÉÓ÷çÏÕ£¬ËùÒÔÇмÇÒª±£Ö¤SBN/SNN²»Äܳ¤Ê±¼ä¹ÊÕÏ¡£

HDFS-6425 HDFS-6772 NameNodeÖØÆôºóDataNode¿ìËÙÍ˳öblockContentsStale״̬·ÀÖ¹PostponedMisreplicatedBlocks¹ý´óÓ°Ïì¶ÔÆäËûRPCÇëÇóµÄ´¦ÀíÄÜÁ¦

Fix: 2.6.0£¬ 2.7.0

µ±¼¯ÈºÖдóÁ¿Êý¾Ý¿éµÄʵ¼Ê´æ´¢¸±±¾¸öÊý³¬¹ý¸±±¾Êýʱ£¨¿ç»ú·¿¼Ü¹¹ÏÂÕâÖÖÇé¿ö±È½Ï³£¼û£©£¬NameNodeÖØÆôºó»áѸËÙÌî³äµ½PostponedMisreplicatedBlocks£¬Ö±µ½Ïà¹ØÊý¾Ý¿éËùÔÚµÄËùÓÐDataNode»ã±¨Íê³ÉÇÒÍ˳öStale״̬ºó²ÅÄܱ»ÇåÀí¡£Èç¹ûPostponedMisreplicatedBlocksÊý¾ÝÁ¿½Ï´ó£¬Ã¿´ÎÈ«±éÀúÐèÒªÏûºÄ´óÁ¿Ê±¼ä£¬ÇÒÕû¸ö¹ý³ÌÒ²Òª³ÖÓÐÈ«¾ÖËø£¬ÑÏÖØÓ°Ïì´¦ÀíBlockReportµÄÐÔÄÜ£¬HDFS-6425ºÍHDFS-6772·Ö±ð½«¿ÉÄÜÔÚBlockReportÂß¼­ÄÚ²¿±éÀú·Ç³£´óµÄÊý¾Ý½á¹¹PostponedMisreplicatedBlocksÓÅ»¯µ½Òì²½Ö´ÐУ¬²¢ÔÚNameNodeÖØÆôºóÈÃDataNode¿ìËÙÍ˳öblockContentsStale״̬±ÜÃâPostponedMisreplicatedBlocks¹ý´óÈëÊÖÓÅ»¯ÖØÆôЧÂÊ¡£

½µµÍBlockReportʱÊý¾Ý¹æÄ£

NameNode´¦ÀíBlockReportµÄЧÂʵÍÖ÷ÒªÔ­Òò»¹ÊÇÿ´ÎBlockReportËù´øµÄBlock¹æÄ£¹ý´óÔì³É£¬ËùÒÔ¿ÉÒÔͨ¹ýµ÷ÕûBlockÊýÁ¿ãÐÖµ£¬½«Ò»´ÎBlockReport·Ö³É¶àÅÌ·Ö±ð»ã±¨£¬ÒÔÌá¸ßNameNode¶ÔBlockReportµÄ´¦ÀíЧÂÊ¡£¿É²Î¿¼µÄ²ÎÊýΪ£ºdfs.blockreport.split.threshold£¬Ä¬ÈÏÖµ1,000,000£¬¼´µ±DataNode±¾µØµÄBlock¸öÊý³¬¹ý1,000,000ʱ²Å»á·ÖÅ̽øÐл㱨£¬½¨Ò齫¸Ã²ÎÊýÊʵ±µ÷С£¬¾ßÌåÊýÖµ¿É½áºÏNameNodeµÄ´¦ÀíBlockReportʱ¼ä¼°¼¯ÈºÖÐËùÓÐDataNode¹ÜÀíµÄBlockÁ¿·Ö²¼È·¶¨¡£

ÖØÆôÍê³Éºó¶Ô±È¼ì²éÊý¾Ý¿éÉϱ¨Çé¿ö

Ç°ÃæÌáµ½NameNode»ã×ÜDataNodeÉϱ¨µÄÊý¾Ý¿éÁ¿´ïµ½Ô¤Éè±ÈÀý£¨dfs.namenode.safemode.threshold-pct£©ºó¾Í»áÍ˳öSafemode£¬Ò»°ãÇé¿öÏ£¬µ±NameNodeÍ˳öSafemodeºó£¬ÎÒÃÇÈÏΪÒѾ­¾ß±¸ÌṩÕý³£·þÎñµÄÌõ¼þ¡£µ«ÊǶԹæÄ£½Ï´óµÄ¼¯Èº£¬°´ÕÕÕâÖÖĬÈϲßÂÔ¼°Ê±Ö´ÐÐÖ÷´ÓÇл»ºó£¬ÈÝÒ׳öÏÖ¶Ìʱ¼ä¶ª¿éµÄÎÊÌâ¡£¿¼ÂÇÔÚ200MÊý¾Ý¿éµÄ¼¯Èº£¬Ä¬ÈÏÅäÖÃÏîdfs.namenode.safemode.threshold-pct=0.999£¬Ò²¾ÍÊǵ±NameNodeÊÕ¼¯µ½200M*0.999=199.8MÊý¾Ý¿éºó¼´¿ÉÍ˳öSafemode£¬´Ëʱʵ¼ÊÉÏ»¹ÓÐ200KÊý¾Ý¿éûÓÐÉϱ¨£¬Èç¹ûÇ¿ÐÐÖ´ÐÐÖ÷´ÓÇл»£¬»á³öÏÖ´óÁ¿µÄ¶ª¿éÎÊÌ⣬ֱµ½Êý¾Ý¿é»ã±¨Íê³É¡£Ó¦¶ÔµÄ°ì·¨±È½Ï¼òµ¥£¬³¢ÊÔµ÷´ódfs.namenode.safemode.threshold-pctµ½1£¬ÕâÑùÖ»ÓÐËùÓÐÊý¾Ý¿éÉϱ¨ºó²Å»áÍ˳öSafemode¡£µ«ÊÇÕâÖÖ°ì·¨Ò»Ñù²»Äܱ£Ö¤ÍòÎÞһʧ£¬Èç¹ûÆô¶¯¹ý³ÌÖÐÓÐDataNode»ã±¨ÍêÊý¾Ý¿éºó½ø³Ì¹Òµô£¬Í¬Ñù´æÔÚ¶Ìʱ¼ä¶ªÊ§Êý¾ÝµÄÎÊÌ⣬ÒòΪNameNode»ã×ÜÉϱ¨Êý¾Ý¿éʱ²¢²»¼ì²é¸±±¾Êý£¬ËùÒÔ¸üÎÈÍ׵Ľâ¾ö°ì·¨ÊÇÀûÓÃÖ÷´ÓNameNodeµÄJMXÊý¾Ý¶Ô±ÈËùÓÐDataNodeµ±Ç°»ã±¨Êý¾Ý¿éÁ¿µÄ²îÒ죬µ±²îÒ춼½ÏСºóÔÙÖ´ÐÐÖ÷´ÓÇл»¿ÉÒÔ±£Ö¤²»·¢ÉúÉÏÊöÎÊÌâ¡£

ÆäËû

³ýÁËÓÅ»¯NameNodeÖØÆôʱ¼ä£¬Êµ¼ÊÔËάÖл¹»áÓöµ½ÐèÒª¹ö¶¯ÖØÆô¼¯ÈºËùÓнڵã»òÕßÒ»´ÎÐÔÖØÆôÕû¼¯ÈºµÄÇé¿ö£¬²»Ç¡µ±µÄÖØÆô·½Ê½Ò²»áÑÏÖØÓ°Ïì·þÎñµÄ»Ö¸´Ê±¼ä£¬ËùÒÔºÏÀí¿ØÖÆÖØÆôµÄ½Ú×à»òÑ¡ÔñºÏÊʵÄÖØÆô·½Ê½ÓÈΪ¹Ø¼ü£¬HDFS¼¯ÈºÆô¶¯·½Ê½·ÖÎöÒ»ÎĶԼ¯ÈºÖØÆô·½Ê½½øÐÐÁËÏêϸµÄ²ûÊö£¬ÕâÀï¾Í²»ÔÙÕ¹¿ª¡£

¾­¹ý¶à´ÎÓÅ»¯µ÷Õû£¬´ÓÏßÉÏNameNodeÀú´ÎµÄÖØÆôʱ¼ä¼à¿ØÖ¸±êÉÏ¿´£¬ÊÕÒæ·Ç³£Ã÷ÏÔ£¬Í¼7½ØÈ¡ÁËÆäÖм¸´ÎNameNodeÖØÆôʱԪÊý¾ÝÁ¿¼°ÖØÆôʱ¼ä¿ªÏú¶Ô±È£¬Í¼ÖÐÖ±¹ÛÏÔʾÔÚ500MÔªÊý¾ÝÁ¿¼¶Ï£¬ÖØÆôʱ¼ä´Ó~4000sÓÅ»¯µ½~2000s¡£

ͼ7 NameNodeÖØÆôʱ¼ä¶Ô±È

ÕâÀïÂÞÁÐÁËһС²¿·Öʵ¼ù¹ý³ÌÖпÉÒÔÓÐЧÓÅ»¯ÖØÆôNameNodeʱ¼ä»òÕßÖØÆôÈ«¼¯ÈºµÄµã£¬ÆäÖаüÀ¨ÁËÉçÇø³ÉÊìPatchºÍÏà¹Ø²ÎÊýÓÅ»¯£¬ËäȻʵÏÖÂß¼­¶¼ºÜС£¬µ«ÊÇʵ¼ùÊÕÒæ·Ç³£Ã÷ÏÔ¡£µ±È»³ýÁËÉÏÊöÌáµ½£¬NameNodeÖØÆô»¹Óкܶà¿ÉÒÔÓÅ»¯µÄµØ·½£¬±ÈÈçÓÅ»¯FSImage¸ñʽ£¬²¢ÐмÓÔصȵȣ¬ÉçÇøÒ²ÔÚ³ÖÐø¹Ø×¢ºÍÓÅ»¯£¬²¿·ÖÌÖÂÛµÄ˼·ҲֵµÃ¹Ø×¢¡¢½è¼øºÍ²Î¿¼¡£

ËÄ¡¢×ܽá

NameNodeÖØÆôÉõÖÁÈ«¼¯ÈºÖØÆôÔÚÕû¸öHadoop¼¯ÈºµÄÉúÃüÖÜÆÚÄÚÊDZȽÏƵ·±µÄÔËά²Ù×÷£¬ÓÅ»¯ÖØÆôʱ¼ä¿ÉÒÔ¼«´óÌáÉýÔËάЧÂÊ£¬±ÜÃâ¿ÉÄÜ´æÔڵķçÏÕ¡£±¾ÎÄͨ¹ý·ÖÎöNameNodeÆô¶¯Á÷³Ì£¬²¢½á

   
3595 ´Îä¯ÀÀ       21
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ