복붙노트

[HADOOP] 클라이언트가 다음을 통해 인증 할 수 없습니다. [TOKEN, KERBEROS]

HADOOP

클라이언트가 다음을 통해 인증 할 수 없습니다. [TOKEN, KERBEROS]

프로그래밍 방식으로 작업을 시작하기 위해 YarnClient를 사용하고 있습니다. 내가 실행중인 클러스터는 Kerberos 화되었습니다.

일반 맵은 "yarn jar examples.jar wordcount ..."작업을 통해 제출 된 작업을 줄입니다.

프로그래밍 방식으로 제출하려고하는 작업은 그렇지 않습니다. 이 오류가 발생합니다.

코드는 다음과 같습니다.

ClientContext context = createContextFrom(args);
YarnConfiguration configuration = new YarnConfiguration();
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(configuration);
ClientService client = new ClientService(context, yarnClient, new InstallManager(FileSystem.get(configuration)));
LOG.info(Messages.RUNNING_CLIENT_SERVICE);
boolean result = client.execute();

아마도 다음과 같은 효과에 무언가를 추가한다고 생각했습니다.

yarnClient.getRMDelegationToken(new Text(InetAddress.getLocalHost().getHostAddress()));

어쩌면 내 화가 나올 수는 있지만 도움이되지 않는 것 같습니다. 도움을 주시면 감사하겠습니다.

해결법

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

    1.자, 몇 시간과 몇 시간 후에 우리는 이것을 알아 냈습니다. 다음 세대의 모든 코더들에게는 hadoop의 문서 부족으로 영원히 괴로워했습니다.

    자, 몇 시간과 몇 시간 후에 우리는 이것을 알아 냈습니다. 다음 세대의 모든 코더들에게는 hadoop의 문서 부족으로 영원히 괴로워했습니다.

    자격 증명을 가져 오려면 UserGroupInformation 개체에서 토큰을 가져와야합니다. 그런 다음 ContainerLaunchContext에서 토큰을 설정해야합니다.

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

    2.hdfs 경로에서 HA의 논리적 URI 대신 실제 이름 노드를 사용하는 경우에도이 오류가 발생합니다.

    hdfs 경로에서 HA의 논리적 URI 대신 실제 이름 노드를 사용하는 경우에도이 오류가 발생합니다.

    논리적 uri 대신 namenode uri를 찾으면 kerberos UGI 대신 간단한 UGI를 사용하려고하는 비 HA 파일 시스템을 생성하기 때문입니다.

  3. ==============================

    3.호환되지 않는 hadoop 아티팩트 버전과 동일한 오류가 발생했습니다.

    호환되지 않는 hadoop 아티팩트 버전과 동일한 오류가 발생했습니다.

    작업 예 :

    public static final String CONF_CORE_SITE = "/etc/hadoop/conf/core-site.xml";
    public static final String CONF_HDFS_SITE = "/etc/hadoop/conf/hdfs-site.xml";
    
    /**
     * Pick the config files from class path
     */
    private static Configuration getHdfsConfiguration() throws IOException {
        Configuration configuration = new Configuration();
    
        configuration.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
        configuration.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
    
        File hadoopCoreConfig = new File(CONF_CORE_SITE);
        File hadoopHdfsConfig = new File(CONF_HDFS_SITE);
    
        if (! hadoopCoreConfig.exists() || ! hadoopHdfsConfig.exists()) {
            throw new FileNotFoundException("Files core-site.xml or hdfs-site.xml are not found. Check /etc/hadoop/conf/ path.");
        }
    
        configuration.addResource(new Path(hadoopCoreConfig.toURI()));
        configuration.addResource(new Path(hadoopHdfsConfig.toURI()));
    
        //Use existing security context created by $ kinit
        UserGroupInformation.setConfiguration(configuration);
        UserGroupInformation.loginUserFromSubject(null);
        return configuration;
    }
    

    pom.khml

    <properties>
      <hadoop.version>2.6.0</hadoop.version>
      <hadoop.release>cdh5.14.2</hadoop.release>
    </properties>
    
    
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-core</artifactId>
      <version>${hadoop.version}-mr1-${hadoop.release}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>${hadoop.version}-${hadoop.release}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version}-${hadoop.release}</version>
    </dependency>
    
  4. from https://stackoverflow.com/questions/25755479/client-cannot-authenticate-viatoken-kerberos by cc-by-sa and MIT license