복붙노트

[HADOOP] jdbc와 kerberos keytab을 사용하여 하이브 메타 스토어에 액세스하기

HADOOP

jdbc와 kerberos keytab을 사용하여 하이브 메타 스토어에 액세스하기

인증을 위해 Kerberos를 사용하도록 구성된 하이브 메타 스토어에 연결하려고합니다. 키 탭 파일을 사용하지 않을 때, 즉 프로그램이 인증 과정에서 비밀번호를 입력하라는 메시지를 표시 할 때 작동합니다. keytab을 사용하도록 구성을 변경할 때 다음 진술을 포함하는 긴 스택 추적을 얻습니다.

Additional pre-authentication required (25) - Need to use PA-ENC-TIMESTAMP/PA-PK-AS-REQ

누구든지 내가 뭘 잘못하고 있는지에 대한 조언을 해줄 수 있습니까?

내 문제의 맥락이 관련성이 있다면, 나는 mapreduce job에서 하이브 metastore에 접근하고 싶다. 물론 mapreduce job은 프롬프트에 응답 할 수 없다.

내 프로그램은 다음과 같습니다.

package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HiveJDBC {

   public static void main(String[] args) throws Exception {

      Class.forName("org.apache.hive.jdbc.HiveDriver");
      System.setProperty("java.security.auth.login.config","gss-jaas.conf");
      System.setProperty("sun.security.jgss.debug","true");
      System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
      System.setProperty("java.security.krb5.conf","krb5.conf");

      Connection con = DriverManager.getConnection("jdbc:hive2://some.machine:10000/default;principal=hive/some.machine@MY_REALM");

      // Do stuff with the connection
   }
}

내 gss-jaas.conf 파일은 다음과 같습니다.

com.sun.security.jgss.initiate {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   useTicketCache=false
   principal="my-account@MY_REALM"
   doNotPrompt=true
   keyTab="path-to-my-keytab-file"
   debug=true;
};

내 krb5.conf 파일은 다음과 같습니다.

[libdefaults]
default_realm = MY_REALM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d

[realms]     
 MY_REALM = {
  kdc = some.host:88
  admin_server = another.host
 }

다음 명령을 사용하여 ktutil 프로그램으로 생성 한 내 키탭 파일

ktutil: addent -password -p username@MY_REALM -k 1 -e aes256-cts

해결법

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

    1.분명히이 오류는 ktutil 명령을 실행할 때 잘못된 암호화 유형을 사용하여 발생했습니다. 올바른 암호화로 전환 (나는 우리가 사용하는 언급하지 않습니다) 문제를 해결.

    분명히이 오류는 ktutil 명령을 실행할 때 잘못된 암호화 유형을 사용하여 발생했습니다. 올바른 암호화로 전환 (나는 우리가 사용하는 언급하지 않습니다) 문제를 해결.

  2. from https://stackoverflow.com/questions/21375372/accessing-hive-metastore-using-jdbc-with-kerberos-keytab by cc-by-sa and MIT license