hadoop namenode format做了什么?

一看到format就和磁盘格式化联想到一起,然后这个format是对hdfs来说的,所以有些人害怕真的是格式化自己的文件系统了,其实大可不必担心。

 

具体的实现format的功能是在  org.apache.hadoop.hdfs.server.namenode.FSImage  这个类的format(StorageDirectory sd)方法中,我们首先大概看下方法说明:

 

Java代码      收藏代码
  1. /** Create new dfs name directory.  Caution: this destroys all files  
  2.    * in this filesystem. */   

   这个方法说明是建立新的dfs name dir,但是会删除所有这个目录下的文件,这个看方法实现中的第一行就可以知道

 

Java代码      收藏代码
  1. sd.clearDirectory();  // create currrent dir   
  2.   
  3. 针对clearDirectory的说明如下:  
  4.      * Clear and re-create storage directory.  
  5.      * <p>  
  6.      * Removes contents of the current directory and creates an empty directory.  
  7.      *   
  8.      * This does not fully format storage directory.  

 

  好下面看具体的做了什么

Java代码      收藏代码
  1. 1 :saveFSImage(getImageFile(sd, NameNodeFile.IMAGE));  
  2. 2 :editLog.createEditLogFile(getImageFile(sd, NameNodeFile.EDITS));  

   其实就是建立新的image文件以及editlog文件,只是这些文件建立的时候会写入一些初始值。

   首先来看image文件的建立过程:

 

Java代码      收藏代码
  1. 1 :saveINode2Image   //save the root   
  2. 2 :saveImage  // save the rest of the nodes   
  3. 3 :fsNamesys.saveFilesUnderConstruction  //Serializes leases   

   其实这三部 在第一次format时只有第一步会真正写数据,其他两步在这个时候还未有作用。

   第一步写了一些权限组相关的信息,具体可以看  fsimage 文件。


  再来看editlog的建立过程:

  用RandomAccessFile 建立了一个rw文件用于记录editlog。

 

  总的来说:namenode format只是初始化一些目录和文件而已。

更多信息请查看 java进阶网 http://www.javady.com

猜你喜欢

转载自jlins-you.iteye.com/blog/1489825