Ejemplo n.º 1
0
  /**
   * Add a namenode to cluster and start it. Configuration of datanodes in the cluster is refreshed
   * to register with the new namenode.
   *
   * @return newly started namenode
   */
  public NameNodeInfo addNameNode(Configuration conf) throws IOException {
    if (!federation) {
      throw new IOException("cannot add namenode to non-federated cluster");
    }
    int nnIndex = nameNodes.length;
    int numNameNodes = nameNodes.length + 1;
    NameNodeInfo[] newlist = new NameNodeInfo[numNameNodes];
    System.arraycopy(nameNodes, 0, newlist, 0, nameNodes.length);
    nameNodes = newlist;
    nameNodes[nnIndex] = new NameNodeInfo(nnIndex);

    NameNodeInfo nni = nameNodes[nnIndex];
    nni.createAvatarDirs();
    String nameserviceId = NAMESERVICE_ID_PREFIX + nnIndex;
    String nameserviceIds = conf.get(FSConstants.DFS_FEDERATION_NAMESERVICES);
    nameserviceIds += "," + nameserviceId;
    nni.initGeneralConf(conf, nameserviceId);
    conf.set(FSConstants.DFS_FEDERATION_NAMESERVICES, nameserviceIds);

    nni.updateAvatarConf(conf);
    startAvatarNode(nni);

    // Refresh datanodes with the newly started namenode
    for (DataNodeProperties dn : dataNodes) {
      DataNode datanode = dn.datanode;
      datanode.refreshNamenodes(conf);
    }
    // Wait for new namenode to get registrations from all the datanodes
    waitDataNodesActive(nnIndex);
    return nni;
  }
Ejemplo n.º 2
0
 private void startAvatarNodes() throws IOException {
   for (NameNodeInfo nni : this.nameNodes) {
     nni.updateAvatarConf(this.conf);
     startAvatarNode(nni);
   }
 }