Hadoop源码分析之NameNode的格式化

在配置Hadoop环境后,第一次启动NameNode节点之前,需要使用命令hadoop namenode -format对NameNode节点进行格式化,那么这个格式化的过程是怎么样的呢?这篇文章就来分析NameNode格式化的过程。

NameNode格式化过程

NameNode节点以参数-format启动之后,会进入NameNode.createNameNode()方法,在这个方法中有一个switch语句,其中有一项就是FORMAT,switch语句代码如下:

switch (startOpt) {
      case FORMAT:
        boolean aborted = format(conf, startOpt.getConfirmationNeeded(),
            startOpt.getInteractive());
        System.exit(aborted ? 1 : 0);
      case FINALIZE:
        aborted = finalize(conf, true);
        System.exit(aborted ? 1 : 0);
      case RECOVER:
        NameNode.doRecovery(startOpt, conf);
        return null;
      default:
    }

可见,如果以-format参数启动,就会进入到NameNode.format()方法,对NameNode节点进行格式化。NameNode.format()方法的代码如下:

  private static boolean format(Configuration conf,
      boolean isConfirmationNeeded, boolean isInteractive) throws IOException {
    Collection<File> dirsToFormat = FSNamesystem.getNamespaceDirs(conf);//保存命名空间镜像目录
    Collection<File> editDirsToFormat = 
                 FSNamesystem.getNamespaceEditsDirs(conf);//保存编辑日志目录
    for(Iterator<File> it = dirsToFormat.iterator(); it.hasNext();) {
      File curDir = it.next();
      if (!curDir.exists())
        continue;//目录不存在
      if (isConfirmationNeeded) {//目录存在
        if (!isInteractive) {
          System.err.println("Format aborted: " + curDir + " exists.");
          return true;
        }
        System.err.print("Re-format filesystem in " + curDir +" ? (Y or N) ");//提示用户确认删除
        if (!(System.in.read() == 'Y')) {
          System.err.println("Format aborted in "+ curDir);
          return true;
        }
        while(System.in.read() != '\n'); // discard the enter-key
      }
    }

    FSNamesystem nsys = new FSNamesystem(new FSImage(dirsToFormat,
                                         editDirsToFormat), conf);
    nsys.dir.fsImage.format();
    return false;
  }

NameNode.format()方法有三个参数,第一个参数是配置信息,第二个参数和第三个参数分别通过StartupOption.getConfirmationNeeded()方法和StartupOption.getInteractive()方法获得,即获取StartupOption枚举中的isConfirmationNeeded和isInteractive这两个成员变量的值。在Hadoop源码分析之NameNode的启动与停止这篇文章中分析过NameNode的启动参数,-force参数的用法是java NameNode [-format [ -force ] [-nonInteractive]]。可以看到NameNode的启动参数-format还可以带有两个启动参数,这里称为子参数吧!isConfirmationNeeded和isInteractive这两个成员变量分别对应着force和nonInteractive,其中nonIntera

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值