복붙노트

[HADOOP] 하이브 JDBC getConnection이 반환하지 않습니다.

HADOOP

하이브 JDBC getConnection이 반환하지 않습니다.

하이브 JDBC 튜토리얼을 따르고있다. 나는 그것을 작동시킬 수 없었다. 연결을 시도하면 연결이 끊어집니다. 오류를보고하지 않습니다. 하이브 서버가 실행 중입니다. 어떤 도움?

public class HiveJdbcClient {
  private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
  public static void main(String[] args){
      try {
      Class.forName(driverName);
    } catch (ClassNotFoundException e) {
           e.printStackTrace();
      System.exit(1);
    }

    try{
        Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
        System.out.println("got the connection");

    }catch(SQLException e){
        e.printStackTrace();
    }
  }
}

netstat의 출력 :

$ sudo netstat -anlp | grep 10000
Password:
tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN      27738/java
tcp      107      0 127.0.0.1:10000             127.0.0.1:45910             ESTABLISHED 27738/java
tcp        0      0 127.0.0.1:33665             127.0.0.1:10000             ESTABLISHED 24475/java
tcp        0      0 127.0.0.1:45910             127.0.0.1:10000             ESTABLISHED 7445/java
tcp      107      0 127.0.0.1:10000             127.0.0.1:33665             ESTABLISHED 27738/java

해결법

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

    1.Naresh : triffserver를 중지 한 다음 터미널에서 HIVE_HOME / bin 디렉토리로 이동 한 다음 ./hive --service hiveserver 10000 & 명령을 사용하여 하이브 트립 서버를 시작하십시오. 그런 다음 프로그램을 실행 해보십시오. 하이브 클라이언트 위키 예제에 따라 테이블을 만듭니다. 그런 다음 다음 단계에서 show tables 쿼리를 수행하십시오. 이 단계를 수행하면 결과를 알려주십시오. 우리는 그 후에 토론 할 수 있습니다.

    Naresh : triffserver를 중지 한 다음 터미널에서 HIVE_HOME / bin 디렉토리로 이동 한 다음 ./hive --service hiveserver 10000 & 명령을 사용하여 하이브 트립 서버를 시작하십시오. 그런 다음 프로그램을 실행 해보십시오. 하이브 클라이언트 위키 예제에 따라 테이블을 만듭니다. 그런 다음 다음 단계에서 show tables 쿼리를 수행하십시오. 이 단계를 수행하면 결과를 알려주십시오. 우리는 그 후에 토론 할 수 있습니다.

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

    2.행방이 어디에서 일어나고 있는지 정확히 알아 내기 위해 다음을 할 수 있습니다. 다음은 깨진 Hive JDBC 연결에서 추적 한 예제입니다. 이것은 일반적인 하이브 연결 hanging 오류에 대한 구체적인 해결책이 아닙니다.

    행방이 어디에서 일어나고 있는지 정확히 알아 내기 위해 다음을 할 수 있습니다. 다음은 깨진 Hive JDBC 연결에서 추적 한 예제입니다. 이것은 일반적인 하이브 연결 hanging 오류에 대한 구체적인 해결책이 아닙니다.

    이것은 "JDBC 하이브 연결이 어디에 매달려 있는지 어떻게 알 수 있습니까?"라는 질문에 대한 대답입니다.

    이것을 추적하기 어려운 것은 JDBC 동적 호출입니다. 대신 HiveConnection () 클래스를 수동으로 만들 수 있습니다. 이를 통해 코드에 직접 일부 추적을 추가하여 중단이 발생한 위치를 확인할 수 있습니다.

    나는 다음을 수행함으로써 이것을 추적했다.

    * USING LOG4J *

    절약 및 기타 JDBC 하이브 클래스는 연결시 log4j를 사용합니다. 디버그 로깅을 설정하면 세밀한 오류를 볼 수 있습니다. 당신은 쉽게 추가 할 수 있습니다.

    BasicConfigurator.configure ()

    귀하의 클라이언트 응용 프로그램에. 어쨌든이 작업을 통해 SASL 전송 계층에서 스톨 중임을 알 수있었습니다. 보안 관련 문제일지도 모르겠지만, 보안 오류가 계속 반환 될 것이라고 생각합니다. 따라서 JIRA에 합당한 수준이라고 생각합니다. 후속 질문을 붙여 넣었습니다.

    TSaslTransport (하이브 관련)의 실패를 어떻게 추적 할 수 있습니까?

    * 다른 메소드 *

    1) github에서 "HiveConnection"클래스의 복사본을 가져올 수 있습니다. 또는 어디에서든지 새 인스턴스를 인스턴스화 할 수 있습니다.

    String url = String.format ( "jdbc : hive2 : // % s : % s / default",                     섬기는 사람,                     포트)     속성 p = 새 속성 ();     p.setProperty ( "호스트", con);     연결 jdbc = 새로운 HiveConnection (url, p);

    그런 다음 디버거 훅 또는 로그 문을 HiveConnection () 클래스에 추가 할 수 있습니다.

    궁극적으로, 나는이 오류가있을 때 그것을 추적 :

    openTransport

    궁극적으로

    org.apache.thrift.transport.TSaslClientTransport

    예.

    그리고이 코드 블록에서 중단이 발생합니다.

    시도 {         System.out.println ( "..... 1 계속해서 열려고합니다."+ transport.getClass (). getName ());         transport.open ();         System.out.println ( "완료되었습니다.");     }     catch (TTransportException e) {         System.out.println ( "2 fail.");       e.printStackTrace ();       새로운 SQLException를 throw합니다 ( "접속을 확립 할 수 없습니다"           + uri + ":"+ e.getMessage (), "08S01");     }

    참고로 나는 왜 내 연결이 실패했는지에 대한 후속 조치를 게시했습니다. 그것도 당신과 관련이있을 수 있습니다 ... 나는 어떻게 TSaslTransport (하이브와 관련된)의 실패를 추적 할 수 있습니까?

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

    3.나도 같은 문제가 있었어 /이 매개 변수를 확인해 보라.

    나도 같은 문제가 있었어 /이 매개 변수를 확인해 보라.

    driverName = "org.apache.hive.jdbc.HiveDriver"
    
    con = DriverManager.getConnection("jdbc:hive2://192.168.1.93:10000/default", "", "");
    
  4. from https://stackoverflow.com/questions/11769477/hive-jdbc-getconnection-does-not-return by cc-by-sa and MIT license