복붙노트

[HADOOP] 네임 노드 고 가용성 클라이언트 요청

HADOOP

네임 노드 고 가용성 클라이언트 요청

아무도 말해 주실 수 있습니다. Java 응용 프로그램을 사용하여 Namenode HA 설치로 HDFS에 파일 업로드 / 다운로드 작업을 요청하는 경우이 요청이 먼저 처리됩니다. 클라이언트가 어떤 네임 노드가 활성화되어 있는지 어떻게 알 수 있습니까?

일부 워크 플로 유형 다이어그램 또는 요청 단계를 자세히 설명하는 항목 (시작부터 끝까지)을 제공하면 좋을 것입니다.

해결법

  1. ==============================

    1.hadoop 클러스터가 HA로 구성되어 있으면 hdfs-site.xml에 다음과 같이 namenode ID가 있습니다.

    hadoop 클러스터가 HA로 구성되어 있으면 hdfs-site.xml에 다음과 같이 namenode ID가 있습니다.

    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>namenode1,namenode2</value>
    </property>
    

    NameNode가 먼저 시작되면 활성화됩니다. 기본 노드가 먼저 시작되도록 특정 순서로 클러스터를 시작하도록 선택할 수 있습니다.

    namenode의 현재 상태를 확인하려면 getServiceStatus () 명령을 사용할 수 있습니다.

    hdfs haadmin -getServiceState <machine-name>
    

    음, 드라이버 클래스를 작성하는 동안 구성 객체에 다음과 같은 속성을 설정해야합니다.

     public static void main(String[] args) throws Exception {
        if (args.length != 2){
            System.out.println("Usage: pgm <hdfs:///path/to/copy> </local/path/to/copy/from>");
            System.exit(1);
        }
        Configuration conf = new Configuration(false);
        conf.set("fs.defaultFS", "hdfs://nameservice1");
        conf.set("fs.default.name", conf.get("fs.defaultFS"));
        conf.set("dfs.nameservices","nameservice1");
        conf.set("dfs.ha.namenodes.nameservice1", "namenode1,namenode2");
        conf.set("dfs.namenode.rpc-address.nameservice1.namenode1","hadoopnamenode01:8020");
        conf.set("dfs.namenode.rpc-address.nameservice1.namenode2", "hadoopnamenode02:8020");
        conf.set("dfs.client.failover.proxy.provider.nameservice1","org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
    
        FileSystem fs =  FileSystem.get(URI.create(args[0]), conf);
        Path srcPath = new Path(args[1]);
        Path dstPath = new Path(args[0]);
        //in case the same file exists on remote location, it will be overwritten
        fs.copyFromLocalFile(false, true, srcPath, dstPath);
    }
    

    요청은 nameservice1로 이동하고 namenode 상태 (활성 / 대기)에 따라 Hadoop 클러스터에서 처리됩니다.

    자세한 내용은 HDFS 고 가용성

  2. ==============================

    2.HDFS 클라이언트 요청 처리시 주요 엔티티가있는 네임 노드 HA 아키텍처를 확인하십시오.

    HDFS 클라이언트 요청 처리시 주요 엔티티가있는 네임 노드 HA 아키텍처를 확인하십시오.

    클라이언트 / 드라이버의 경우 어떤 namenode가 활성 상태인지는 중요하지 않습니다. 왜냐하면 namenode의 호스트 네임이 아닌 네임 서비스 ID로 HDFS를 쿼리하기 때문입니다. nameservice는 자동으로 클라이언트 요청을 활성 namenode로 전송합니다.

    예 : hdfs : // nameservice_id / rest / of / the / hdfs / path

    설명:

    어떻게이 hdfs : // nameservice_id /가 작동하고 그것과 관련된 confs가 무엇입니까?

    hdfs-site.xml 파일

    id를 추가하여 nameservice를 생성하십시오 (여기서 nameservice_id는 mycluster입니다)

    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
      <description>Logical name for this new nameservice</description>
    </property>
    

    이제 namenode id를 지정하여 클러스터의 namenode를 결정합니다.

    dfs.ha.namenodes. [$ nameservice ID] :

    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
      <description>Unique identifiers for each NameNode in the nameservice</description>
    </property>
    

    그런 다음 namenode ids와 namenode 호스트를 연결합니다.

    dfs.namenode.rpc-address. [$ nameservice ID]. [$ name 노드 ID]

    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>machine1.example.com:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>machine2.example.com:8020</value>
    </property>
    

    그런 다음 HDFS 클라이언트가 Active NameNode에 연결하는 데 사용하는 Java 클래스를 지정하여 DFS 클라이언트가이 클래스를 사용하여 현재 어떤 NameNode가 클라이언트 요청을 제공하고 있는지 확인합니다.

    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    

    마지막으로 HDFS URL은 이러한 구성을 변경 한 후에 이와 같을 것입니다.

    hdfs : // mycluster /

    귀하의 질문에 대답하기 위해 나는 구성을 거의 취하지 않았습니다. 저널 노드, 저널 노드 및 사육사 기계가 HDFS에서 네임 노드 HA를 형성하는 방법에 대한 자세한 문서를 확인하십시오.

  3. from https://stackoverflow.com/questions/35911186/namenode-high-availability-client-request by cc-by-sa and MIT license