복붙노트

[HADOOP] 원격 Windows 시스템에서 jdbc를 사용하여 kerberised 하이브에 연결

HADOOP

원격 Windows 시스템에서 jdbc를 사용하여 kerberised 하이브에 연결

Linux 서버 (Red Hat)에서 Kerberos 보안을 사용하는 하이브 환경을 설정했습니다. 그리고 JDBC를 사용하여 원격 Windows 컴퓨터에서 하이브로 연결해야합니다.

그래서, 나는 hiveserver2 리눅스 머신에서 실행하고, 나는 "kinit"했어.

지금 나는이 같은 테스트 프로그램과 함께 윈도우 측면에서 자바 프로그램에서 연결하려고,

Class.forName("org.apache.hive.jdbc.HiveDriver");
String url = "jdbc:hive2://<host>:10000/default;principal=hive/_HOST@<YOUR-REALM.COM>"
Connection con = DriverManager.getConnection(url);

그리고 다음과 같은 오류가 발생했습니다.

Exception due to: Could not open client transport with JDBC Uri:
 jdbc:hive2://<host>:10000/;principal=hive/_HOST@YOUR-REALM.COM>: 
GSS initiate failed

여기서 내가 뭘 잘못하고 있니? 많은 포럼을 확인했지만 적절한 해결책을 얻을 수 없었습니다. 어떤 대답을 주시면 감사하겠습니다.

감사

해결법

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

    1.Linux에서 코드를 실행 중이라면 특정 포멧의 conf 파일에서 시스템 특성을 사용하여 Kerberos 및 JAAS 구성을 정의해야합니다. 또한 디버그 추적 플래그를 전환하여 하위 구성 문제를 이해해야합니다. 즉, JVM의 다양한 버전 / 버전에 구문 요구 사항이 다를 수 있습니다 (문서화되지 않았으므로 시행 착오입니다).

    Linux에서 코드를 실행 중이라면 특정 포멧의 conf 파일에서 시스템 특성을 사용하여 Kerberos 및 JAAS 구성을 정의해야합니다. 또한 디버그 추적 플래그를 전환하여 하위 구성 문제를 이해해야합니다. 즉, JVM의 다양한 버전 / 버전에 구문 요구 사항이 다를 수 있습니다 (문서화되지 않았으므로 시행 착오입니다).

    그러나 Windows에는 추가 문제가 있습니다.

    그 중 Apache Hive 드라이버에는 호환성 문제가 있습니다. 유선 프로토콜이 변경 될 때마다 최신 클라이언트가 이전 서버에 연결할 수 없습니다.

    따라서 Windows 클라이언트 용 Cloudera JDBC 드라이버를 사용하는 것이 좋습니다. 클로 더 (Cloudera) 사이트는 귀하의 전자 메일을 요청합니다. 그런 다음 80 페이지가 넘는 PDF 설명서를 읽고 CLASSPATH에 추가 할 JAR과 JDBC URL을 설명서에 따라 수정하십시오. 사이드 노트 : Cloudera 드라이버는 적절한 JDBC-4.x 호환 드라이버이며, 레거시 Class.forName ()에 대한 필요가 없습니다 ...

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

    2.우리가 문제에 부딪쳤을 때 우리를위한 열쇠는 다음과 같습니다 :

    우리가 문제에 부딪쳤을 때 우리를위한 열쇠는 다음과 같습니다 :

    서버에는 데이터에서 작동하도록 허용 된 특정 Kerberos 원칙이 나열되어 있습니다.

    JDBC를 통해 쿼리를 실행하려고 할 때 클라이언트 측에서 적절한 kinit을 수행하지 않았습니다.

    이 경우 해결책은 분명합니다.

  3. from https://stackoverflow.com/questions/39362326/connect-to-kerberised-hive-using-jdbc-from-remote-windows-system by cc-by-sa and MIT license