[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.Naresh : triffserver를 중지 한 다음 터미널에서 HIVE_HOME / bin 디렉토리로 이동 한 다음 ./hive --service hiveserver 10000 & 명령을 사용하여 하이브 트립 서버를 시작하십시오. 그런 다음 프로그램을 실행 해보십시오. 하이브 클라이언트 위키 예제에 따라 테이블을 만듭니다. 그런 다음 다음 단계에서 show tables 쿼리를 수행하십시오. 이 단계를 수행하면 결과를 알려주십시오. 우리는 그 후에 토론 할 수 있습니다.
Naresh : triffserver를 중지 한 다음 터미널에서 HIVE_HOME / bin 디렉토리로 이동 한 다음 ./hive --service hiveserver 10000 & 명령을 사용하여 하이브 트립 서버를 시작하십시오. 그런 다음 프로그램을 실행 해보십시오. 하이브 클라이언트 위키 예제에 따라 테이블을 만듭니다. 그런 다음 다음 단계에서 show tables 쿼리를 수행하십시오. 이 단계를 수행하면 결과를 알려주십시오. 우리는 그 후에 토론 할 수 있습니다.
-
==============================
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.나도 같은 문제가 있었어 /이 매개 변수를 확인해 보라.
나도 같은 문제가 있었어 /이 매개 변수를 확인해 보라.
driverName = "org.apache.hive.jdbc.HiveDriver" con = DriverManager.getConnection("jdbc:hive2://192.168.1.93:10000/default", "", "");
from https://stackoverflow.com/questions/11769477/hive-jdbc-getconnection-does-not-return by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop을 Java 클래스로 실행하려면 어떻게해야합니까? (0) | 2019.06.28 |
---|---|
[HADOOP] Jobtracker API 오류 - localhost / 127.0.0.1에 대한 호출 : 로컬 예외에서 50030 실패 : java.io.EOFException (0) | 2019.06.28 |
[HADOOP] hadoop의 여러 매퍼 (0) | 2019.06.28 |
[HADOOP] 스파크 데이터 프레임 : 기둥 기반 피벗 및 그룹 (0) | 2019.06.28 |
[HADOOP] 마스터 'yarn'으로 실행하는 경우 HADOOP_CONF_DIR 또는 YARN_CONF_DIR을 환경에 설정해야합니다. (0) | 2019.06.28 |