Uploaded image for project: 'Hadoop HDFS'
  1. Hadoop HDFS
  2. HDFS-13138

webhdfs of federated namenode does not work properly

    Details

    • Type: Bug
    • Status: Patch Available
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 2.7.1, 3.0.0
    • Fix Version/s: None
    • Component/s: webhdfs
    • Labels:
      None

      Description

      my cluster has multiple namenodes using HDFS Federation.

      webhdfs that is not defaultFS does not work properly.

      when I uploaded to non defaultFS namenode  using webhdfs.

      uploaded file was founded at defaultFS namenode.

       

      I think root cause is that

        clientNamenodeAddress of non defaultFS namenode is always fs.defaultFS.

       https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java#L462

       

      /**
         * Set the namenode address that will be used by clients to access this
         * namenode or name service. This needs to be called before the config
         * is overriden.
         */
        public void setClientNamenodeAddress(Configuration conf) {
          String nnAddr = conf.get(FS_DEFAULT_NAME_KEY);
          if (nnAddr == null) {
            // default fs is not set.
            clientNamenodeAddress = null;
            return;
          }
      
          LOG.info("{} is {}", FS_DEFAULT_NAME_KEY, nnAddr);
          URI nnUri = URI.create(nnAddr);
      
          String nnHost = nnUri.getHost();
          if (nnHost == null) {
            clientNamenodeAddress = null;
            return;
          }
      
          if (DFSUtilClient.getNameServiceIds(conf).contains(nnHost)) {
            // host name is logical
            clientNamenodeAddress = nnHost;
          } else if (nnUri.getPort() > 0) {
            // physical address with a valid port
            clientNamenodeAddress = nnUri.getAuthority();
          } else {
            // the port is missing or 0. Figure out real bind address later.
            clientNamenodeAddress = null;
            return;
          }
          LOG.info("Clients are to use {} to access"
              + " this namenode/service.", clientNamenodeAddress );
        }
      
      

       

      so webhdfs is redirected to datanode having wrong namenoderpcaddress parameter

      finally file was located namenode of fs,defaultFS

       

      workaround is

        configure fs.defaultFS of each namenode to its own nameservice.  

      e.g.

        hdfs://ns1  has fs.defaultFS=hdfs://ns1

        hdfs://ns2  has fs.defaultFS=hdfs://ns2

        ....

       

       

       

       

        Attachments

        1. HDFS-13138.003.branch-2.7.patch
          4 kB
          KWON BYUNGCHANG
        2. HDFS-13138.003.patch
          4 kB
          KWON BYUNGCHANG
        3. HDFS-13138.002.branch-2.7.patch
          3 kB
          KWON BYUNGCHANG
        4. HDFS-13138.002.patch
          3 kB
          KWON BYUNGCHANG
        5. HDFS-13138.001.patch
          4 kB
          KWON BYUNGCHANG
        6. HDFS-13138.001.branch-2.7.patch
          4 kB
          KWON BYUNGCHANG

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              magnum KWON BYUNGCHANG
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: