복붙노트

[HADOOP] Eclipse에서 Hive에 JDBC 연결을 설정할 수 없습니다.

HADOOP

Eclipse에서 Hive에 JDBC 연결을 설정할 수 없습니다.

하이브에 대한 JDBC 연결을 설정하여 Eclipse에서 테이블을보고 하이브 테이블을 쿼리 할 수 ​​있습니다. HiveClient 샘플 코드를 사용했습니다 : https://cwiki.apache.org/confluence/display/Hive/HiveClient 그런 다음 Eclipse에 필요한 모든 jar 파일을 java 빌드 경로에 추가하고 Hive Thrift Server를 시작했습니다. 포트 10000이 수신 대기 중입니다. 나는 Cloudera QuickstartVM 4.6.1과 함께 제공되는 일식을 사용하고 있습니다. 코드를 실행하려고하면 IDE에 오류가 발생합니다.

Exception in thread "main" java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset
    at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:191)
    at org.apache.hadoop.hive.jdbc.HiveStatement.execute(HiveStatement.java:127)
    at org.apache.hadoop.hive.jdbc.HiveConnection.configureConnection(HiveConnection.java:108)
    at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:103)
    at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at jdbc.Hive.main(Hive.java:24)

Beeline을 사용하여 Hive에 연결하려고하면 같은 오류가 발생합니다. 그러나! connect 명령에서 호스트 이름과 포트를 제거하면 다음 오류와 함께 작동합니다.

beeline> !connect jdbc:hive:// "" ""                 
scan complete in 4ms
Connecting to jdbc:hive://
14/03/21 18:42:03 WARN conf.HiveConf: DEPRECATED: Configuration property hive.metastore.local no longer has any effect. Make sure to provide a valid value for hive.metastore.uris if you are connecting to a remote metastore.
14/03/21 18:42:03 INFO metastore.HiveMetaStore: 0: Opening raw store with implemenation class:org.apache.hadoop.hive.metastore.ObjectStore
14/03/21 18:42:04 INFO metastore.ObjectStore: ObjectStore, initialize called
14/03/21 18:42:05 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored.

나는 무엇을 여기에서 놓치고있다!?

해결법

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

    1.jdbc를 사용하여 hiveserver에 연결할 수있는 두 가지 옵션이 있습니다.

    jdbc를 사용하여 hiveserver에 연결할 수있는 두 가지 옵션이 있습니다.

    옵션 1 : Hiveserver2

    hiveserver2에 연결하려고 시도하고 있습니다. cloudera 관리자의 hiveserver 버전은 hivesever2이며 hiveserver보다 안전합니다. 사용중인 JDBC 코드는 hiveserver입니다. hiveserver2에 대한 다음 코드 스 니펫을 사용하십시오.

    Class.forName("org.apache.hive.jdbc.HiveDriver");
    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
    Statement stmt = con.createStatement();
    String tableName = "testHiveDriverTable";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName + " (key int, value string)");
    String sql = "show tables '" + tableName + "'";
    

    연결 문자열을 보면 hiveserver 버전 2 (jdbc : hive2 : // localhost : 10000 / default "," "," ")를 볼 수 있습니다. 두 번째 및 세 번째 인수는 기본적으로 사용자 이름과 암호이며, 기본값은 빈 문자열입니다. "".

    이 프로그램을 실행하려면 hiveserver2 특정 라이브러리를 추가하십시오.

    hiveserver2 jdbc 연결을 검사하기위한 프로그램을 직접 작성하는 대신, 비 즈니스 하이브 클라이언트를 다음과 같이 사용할 수 있습니다

    > [testuser02@Abcd-Host1 ~]$ beeline
    
    > beeline> !connect jdbc:hive2://Abcd-Host1:10000/default "" "" ""
    > 
    > 0: jdbc:hive2://Abcd-Host1:10000/default> show tables;
    
    +------------+
    |  tab_name  |
    +------------+
    | sample_07  |
    | sample_08  |
    | test1      |
    +------------+
    3 rows selected (0.334 seconds)
    

    옵션 2 : Hiveserver1

    https://cwiki.apache.org/confluence/display/Hive/HiveClient가있는 기존 코드 (hiveserver1 용 코드)를 사용하려는 경우 다른 포트의 사용자 공간에서 새로운 하이버 서버를 시작해야합니다. 다음 명령을 사용하여 주어진 포트에서 하이버 서버를 시작하십시오

    nohup 하이브 - 서비스 하이버 서버 -p 10001 &

    이제 jdbc 연결에서 포트 번호를 10001로 변경하고 실행하십시오.

  2. from https://stackoverflow.com/questions/22431984/unable-to-establish-a-jdbc-connection-to-hive-from-eclipse by cc-by-sa and MIT license