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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
HDFSÖ®NameNode·ÖÎö
 
×÷ÕߣºToBeAndNotToBeµÄ²©¿Í À´Ô´£ºCSDN ·¢²¼ÓÚ£º2014-12-3
  3375  次浏览      27
 

´ó¼Ò¶¼ÖªµÀHDFSµÄ¼Ü¹¹ÓÉNameNode,SecondaryNameNodeºÍDataNodes×é³É£¬ÆäÔ´ÂëÀàͼÈçÏÂͼËùʾ£º

ÕýÈçÉÏͼËùʾ£¬NameNodeºÍDataNode¼Ì³ÐÁ˺ܶàµÄprotocolÓÃÓڱ˴˼äµÄͨÐÅ£¬ÆäʵnameNode»¹ÊµÏÖÁËRefreshUserMappingsProtocolºÍRefreshAuthorizationPolicyProtocolÁ½¸öЭÒ飬ÓÃÓÚȨÏÞ¿ØÖƺ͸üУ»ÊµÏÖÁËClientProtocolЭÒéÓÃÓÚºÍclient¶ËͨÐÅ¡£

ClientProtocolЭÒ飺

ͨ¹ý´ËЭÒé,client¶Ë¿ÉÒÔ²Ù¿ØÄ¿Â¼¿Õ¼ä£¬°üÀ¨ÎļþÁ÷¶ÁдµÈ¡£±ÈÈ磺

getBlockLocations·½·¨¿ÉÒÔ»ñÈ¡¾ßÌåij¸öÎļþÔÚdatanodeÉϵĴ洢λÖã»

addBlockÌí¼ÓblockÊý¾Ý£¬»¹ÓÐcreate£¬deleteµÈ²Ù×÷¡£

NamenodeProtocolЭÒ飺

ÓÃÓÚsecondNameNodeºÍNameNode½ÚµãͨÐÅ£¬±ÈÈç»ñÈ¡namenodeÉϵÄһЩ״̬ÐÅÏ¢£¬±ÈÈç»ñȡij¸öDataNodeÉϵÄblocksµÄÐÅÏ¢ÒÔ¼°²Ù¿ØeditLogÎļþ£¬Õâ¸öÎļþ»á¼Ç¼ÿ´Înamenode¶ÔÎļþµÄ²Ù×÷ÈÕÖ¾£¬Ï൱ÓÚmysqlµÄbinlog¡£¹ØÓÚsecondarynamenode½ÚµãµÄ×÷ÓÃÕâÀïÒª×ö¸ö˵Ã÷£¬ËüÕæÕýµÄÓÃ;£¬ÊÇÓÃÀ´±£´ænamenodeÖжÔHDFS metadataµÄÐÅÏ¢µÄ±¸·Ý£¬²¢¼õÉÙnamenodeÖØÆôµÄʱ¼ä¡£ÎªÁ˱£Ö¤½»»¥ËÙ¶È£¬HDFSÎļþϵͳµÄmetadataÊDZ»loadµ½namenode»úÆ÷µÄÄÚ´æÖе쬲¢ÇһὫÄÚ´æÖеÄÕâЩÊý¾Ý±£´æµ½´ÅÅ̽øÐг־û¯´æ´¢¡£Îª Á˱£Ö¤Õâ¸ö³Ö¾Ã»¯¹ý³Ì²»»á³ÉΪHDFS²Ù×÷µÄÆ¿¾±£¬hadoop²ÉÈ¡µÄ·½Ê½ÊÇ£ºÃ»ÓжÔÈκÎÒ»´ÎµÄµ±Ç°ÎļþϵͳµÄsnapshot½øÐг־û¯£¬¶ÔHDFS×î ½üÒ»¶Îʱ¼äµÄ²Ù×÷list»á±»±£´æµ½namenodeÖеÄÒ»¸ö½ÐEditlogµÄÎļþÖÐÈ¥¡£µ±ÖØÆônamenodeʱ£¬³ýÁË load fsImageÒâÍ⣬»¹»á¶ÔÕâ¸öEditLogÎļþÖÐ ¼Ç¼µÄHDFS²Ù×÷½øÐÐreplay£¬ÒÔ»Ö¸´HDFSÖØÆô֮ǰµÄ×îÖÕ״̬¡£

¶øSecondaryNameNode£¬»áÖÜÆÚÐԵĽ«EditLogÖмǼµÄ¶ÔHDFSµÄ²Ù×÷ºÏ²¢µ½Ò»¸öcheckpointÖУ¬È»ºóÇå¿Õ EditLog¡£ËùÒÔnamenodeµÄÖØÆô¾Í»áLoad×îеÄÒ»¸öcheckpoint£¬²¢replay EditLogÖÐ ¼Ç¼µÄhdfs²Ù×÷£¬ÓÉÓÚEditLogÖмǼµÄÊÇ´Ó ÉÏÒ»´ÎcheckpointÒÔºóµ½ÏÖÔڵIJÙ×÷ÁÐ±í£¬ËùÒԾͻá±È½ÏС¡£Èç¹ûûÓÐsnnµÄÕâ¸öÖÜÆÚÐԵĺϲ¢¹ý³Ì£¬ÄÇôµ±Ã¿´ÎÖØÆônamenodeµÄʱºò£¬¾Í»á »¨·ÑºÜ³¤µÄʱ¼ä¡£¶øÕâÑùÖÜÆÚÐԵĺϲ¢¾ÍÄܼõÉÙÖØÆôµÄʱ¼ä¡£Í¬Ê±Ò²Äܱ£Ö¤HDFSϵͳµÄÍêÕûÐÔ¡£

DatanodeProtocolЭÒé:

ÓÃÓÚDataNodeºÍNameNode½ÚµãµÄͨÐÅ£¬Ö÷ÒªµÄͨÐŽӿÚÈçÏ£º

¿ÉÒÔ¿´³öÀ´Ã¿¸öDataNodeÆðÀ´Ö®ºóÒªµ÷ÓÃrigister·½·¨Í¨ÖªNameNode¸üÐÂËü£¬È»ºóͨ¹ýsendHeartBeatÐÅÏ¢¸æËßNameNode
Ëü»¹½¡¿µµÄ»îןÍһЩÆäËûÐÅÏ¢£¬µ±È»namenodeÒ²¿ÉÒÔ·µ»ØÒ»Ð©½á¹û¸æËßDatanodeɾ³ý»òÕßÒÆ¶¯Êý¾Ý¡£´ËÍ⻹Óкཻܶ»¥½Ó¿Ú

InterDatanodeProtocolЭÒ飺

¸ÃЭÒéÓÃÓÚDatanode½ÚµãÖ®¼äµÄ»¥ÏàͨÐÅ¡£±ÈÈç»ñÈ¡¾ßÌåÒ»¸öblockµÄmetadataÐÅÏ¢»òÕßÊÇÖ´ÐÐÊý¾Ý»Ö¸´Ç¨ÒÆetc
´ËÍâDataNode»¹ÊµÏÖÁËClientDatanodeProtocolЭÒéÓÃÓÚºÍclient½»»¥Í¨ÐÅ¡£±ÈÈçblock»ñÈ¡£¬blockÊý¾Ý»Ö¸´ºÍblock·¾¶ÐÅÏ¢¡£´ÓÕâÀï¿ÉÒÔ¿´³öclientÌá½»Êý¾ÝµÄʱºòÊÇÏònamenode·¢³öÇëÇó¶ø·ÇÏòdatanode·¢ËÍ´æ´¢Êý¾ÝµÄÇëÇó¡£

Á˽âÁËNameNodeµÄһЩЭÒéÖ®ºóÔÙÀ´¿´¿´NameNodeµÄÊôÐÔ:

¿´¿´¼¸¸öÖØÒªµÄÊôÐÔ£º

serviceRpcServerÓÃÓÚºÍsecondaryNameNode,DataNodeÖ®¼ä½øÐÐRPCͨÐÅ£»

serverÓÃÓÚºÍclient¶Ë½øÐÐRPCͨÐÅ£»

httpServer¾ÍÊÇÎÒÃǵı¾µØÆô¶¯·þÎñÆ÷¡£

NameNodeÔÚ³õʼ»¯µÄʱºò»¹»áÆô¶¯Ò»¸öemptierÏß³ÌÓÃÓÚ¶¨ÆÚµÄɾ³ýµ±Ç°»ØÊÕÕ¾µÄÎļþ¡£¶¨ÆÚʱ¼ä¿ÉÒÔÔÚÅäÖÃÎļþÖÐÅäÖÃfs.trash.interval²ÎÊý£¬¼ÙÈç0µÄ»°¾ÍÏ൱ÓÚ»ØÊÕÕ¾¹¦ÄÜÊÇÎÞЧµÄ

NameNode½Úµã³õʼ»¯µÄ¹¤×÷¾ÍÊÇÏÈÆô¶¯·þÎñÆ÷httpServer,È»ºóÆô¶¯namenode¶Ô¿Í»§¶ËµÄRPC server £¬½Ó×ÅÆô¶¯serviceRpcServer£¬È»ºóÆô¶¯»ØÊÕÕ¾ºǫ́Ïß³Ìemptier

½ÓÏÂÀ´Öص㿴һÏÂnamesystem²ÎÊý£¬namesystemÏ൱ÓÚËùÓÐDataNodeµÄ¼Çʱ¾£¬Ö÷Òª¼Ç¼ÁËÒÔÏÂÐÅÏ¢£º

// Mapping: Êý¾Ý¿é -> { inode½Úµã, datanodeÁбí, self ref }
//Ö÷ÒªÓÃÓڼǼÿ¸öblock´æ´¢µÄdatanode½ÚµãºÍ¶ÔÓ¦µÄinode½ÚµãÐÅÏ¢
//Ò²¾ÍÊÇ´æ´¢ÁËblockµÄmetaÐÅÏ¢

// Updated only in response to client-sent information.  
02.//
03.final BlocksMap blocksMap = new BlocksMap(DEFAULT_INITIAL_MAP_CAPACITY,
04. DEFAULT_MAP_LOAD_FACTOR);

ÊôÐÔdatanodeMap:

NavigableMap<String, DatanodeDescriptor> datanodeMap =  
02. new TreeMap<String, DatanodeDescriptor>();

Õâ¸ötreemap´æ´¢ÁËÿ¸öDataNode¶ÔÓ¦µÄÔªÐÅÏ¢;

ÊôÐÔheartbeatsÓÃÓÚheartbeatÏß³Ì¼à¿ØÊ¹Óãº

ArrayList<DatanodeDescriptor> heartbeats = new ArrayList<DatanodeDescriptor>();¼Ç¼µÄÊÇ´æ»îµÄdatanode½ÚµãÐÅÏ¢  
02.
03.private Map<String, Collection<Block>> recentInvalidateSets =new TreeMap<String, Collection<Block>>(); //ÎÞÓÃblockÁбí

¼ÙÈçÏÖÔÚÒª»ñȡij¸ödatanodeÉϵÄn¸ö½ÚµãµÄ»°£¬ÏÈҪȥdatanodeMapÖлñÈ¡DatanodeDescriptorÐÅÏ¢£¬È»ºó»ñÈ¡BlockInfoÐÅÏ¢

½Ó×ÅblocksMapÖлñÈ¡block´æ´¢µÄdatanode½Úµãid£¬µ±È»¼ÙÈçÕâ¸öblockÔÚrecentInvalidateSetsÁбíÖÐÄǾÍÒª¹ýÂ˵ô¡£

ÊôÐÔdir

//  
02.// Stores the correct file name hierarchy
03.//Õâ¸öÎļþÖд洢ÁËÿ¸öÎļþÃû¶ÔÓ¦µÄλÖÃÒ²¾ÍÊÇÃüÃû¿Õ¼ä
04.//
05.public FSDirectory dir;

½ÓÏÂÀ´ÎÒÃÇÒª¹Ø×¢Ò»ÏÂFSNamesystemµÄ³õʼ»¯¹ý³Ì£º

1.¶ÁÈ¡ºÍÉèÖÃconfÎļþÖеIJÎÊý

2.½«FSNamesystem×¢²áµ½MBeanÒÔ±ãJMS²Ù×÷ºÍ¼à¿Ø

3.¼ÓÔØ±¾µØÓ³ÏóÎļþ

4.Æô¶¯HeartbeatMonitor£¬ReplicationMonitorµÈÏß³Ì

HeartbeatMonitorÏß³ÌÒ»Ö±ÔËÐУ¬Ëü»áÿ¼ä¸ôheartbeatRecheckIntervalʱ¼ä¾ÍÈ¥¼ì²éËùÓеÄdatanode½ÚµãÊÇ·ñalive

while (!allAlive) {  
03. boolean foundDead = false;
04. DatanodeID nodeID = null;
05.
06. // ÔÚdatanode½ÚµãÁбíÖвéÕÒµÚÒ»¸ödeadÁ˵Ä
07.
08. synchronized(heartbeats) {
09. for (Iterator<DatanodeDescriptor> it = heartbeats.iterator();
10. it.hasNext();) {
11. DatanodeDescriptor nodeInfo = it.next();
12. if (isDatanodeDead(nodeInfo)) {//datanodeµÄmetaÐÅÏ¢ÖÐÉϴθüÐÂʱ¼ä³¬¹ýÒ»¶¨·§Öµ
13. foundDead = true;
14. nodeID = nodeInfo;
15. break;
16. }
17. }
18. }
19.
20. //ÒÆ³öÒѾ­ËÀÁ˵Ľڵã
21. if (foundDead) {
22. synchronized (this) {
23. synchronized(heartbeats) {
24. synchronized (datanodeMap) {
25. DatanodeDescriptor nodeInfo = null;
26. try {
27. nodeInfo = getDatanode(nodeID);
28. } catch (IOException e) {
29. nodeInfo = null;
30. }
31. if (nodeInfo != null && isDatanodeDead(nodeInfo)) {
32. NameNode.stateChangeLog.info("BLOCK* NameSystem.heartbeatCheck: "
33. + "lost heartbeat from " + nodeInfo.getName());
34. removeDatanode(nodeInfo);
35. }
36. }
37. }
38. }
39. }
40. allAlive = !foundDead;
41. }
42.ÒÆ³ö²Ù×÷¹ý³ÌÊÇÕâÑùµÄ£º
43.//´ÓheartbeatsÖÐÒÆ³ö
44. synchronized (heartbeats) {
45. if (nodeInfo.isAlive) {
46. updateStats(nodeInfo, false);
47. heartbeats.remove(nodeInfo);
48. nodeInfo.isAlive = false;
49. }
50. }
51.//ɾ³ý¸Ãnode¶ÔÓ¦µÄblockÐÅÏ¢
52. for (Iterator<Block> it = nodeInfo.getBlockIterator(); it.hasNext();) {
53. removeStoredBlock(it.next(), nodeInfo);
54. }
55. unprotectedRemoveDatanode(nodeInfo);
56.//½«Æä´ÓÍØÆË½á¹¹ÖÐÒÆ³ö
57. clusterMap.remove(nodeInfo);

ReplicationMonitorÏ̸߳ºÔðÊý¾Ý¿éµÄ¶à¸ö±¸·ÝºÍ¼à¿Ø¹¤×÷

Ëü¸ºÔð½«ÐèÒª¶à¸ö±¸·ÝµÄblock¼ÓÈëPendingReplicationBlocksÖв¢ÓÃÒ»¸öÏß³Ì¼à¿ØËüÔÚÕâ¸ömapÀïÃæµÄ´æ»îʱ¼ä£¬¹ýÆÚÁ˾ͽ«Æäɾ³ý¡£ÕâÑùÔÚDataNode½ÚµãÆô¶¯·þÎñµÄʱºò¿ÉÒÔɨÃèÕâ¸öÁбíÍê³É¸´ÖƱ¸·Ý¹¤×÷.

   
3375 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí