2015-02-27 24 views
6

Có một câu hỏi ở đây connect from java to Hive nhưng tôi là khác nhauConnect Hive thorugh Java JDBC

hive của tôi chạy trên machine1 và tôi cần phải vượt qua một số truy vấn sử dụng máy chủ Java chạy ở machine2. Theo tôi hiểu Hive có giao diện JDBC với mục đích nhận các truy vấn từ xa. Tôi mất mã từ đây - HiveServer2 Clients

Tôi đã cài đặt phụ thuộc được viết trong bài viết: -

  1. hive-jdbc * .jar
  2. hive-dịch vụ * .jar
  3. libfb303-0.9. 0.jar
  4. libthrift-0.9.0.jar
  5. log4j-1.2.16.jar
  6. slf4j-api-1.6.1.jar
  7. slf4j-log4j12-1.6.1.jar
  8. commons-logging-1.0.4.jar

Tuy nhiên tôi đã java.lang.NoClassDefFoundError lỗi tại thời gian biên dịch Full Lỗi:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration 
    at org.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:393) 
    at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:187) 
    at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163) 
    at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) 
    at java.sql.DriverManager.getConnection(DriverManager.java:571) 
    at java.sql.DriverManager.getConnection(DriverManager.java:215) 
    at com.bidstalk.tools.RawLogsQuerySystem.HiveJdbcClient.main(HiveJdbcClient.java:25) 

Một câu hỏi tại StackOverflow khuyến khích để thêm phụ thuộc Hadoop API trong Maven - Hive Error

Tôi không hiểu tại sao tôi cần API hadoop cho khách hàng để kết nối với Hive. Không nên trình điều khiển JDBC bất khả tri của hệ thống truy vấn cơ bản? Tôi chỉ cần vượt qua một số truy vấn SQL?

Edit: Tôi đang sử dụng Cloudera (5.3.1), tôi nghĩ tôi cần phải thêm CDH phụ thuộc. Ví dụ Cloudera đang chạy hadoop 2.5.0 và HiveServer2

Nhưng máy chủ đang ở máy 1. Trên máy mã nên biên dịch ít nhất và tôi chỉ gặp sự cố khi chạy!

+0

phiên bản được sử dụng của hadoop và hive là gì? –

Trả lời

2

Trả lời câu hỏi của riêng tôi!

Với một số lần truy cập và thử nghiệm, tôi đã thêm các phụ thuộc sau vào tệp pom của mình và kể từ đó tôi có thể chạy mã trên cả hai nhóm CHD 5.3.1 và 5.2.1.

<dependency> 
    <groupId>org.apache.hive</groupId> 
    <artifactId>hive-jdbc</artifactId> 
    <version>0.13.1-cdh5.3.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.thrift</groupId> 
    <artifactId>libthrift</artifactId> 
    <version>0.9.0</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.thrift</groupId> 
    <artifactId>libfb303</artifactId> 
    <version>0.9.0</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-core</artifactId> 
    <version>2.5.0-mr1-cdh5.3.1</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-common</artifactId> 
    <version>2.5.0-cdh5.3.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.hive</groupId> 
    <artifactId>hive-exec</artifactId> 
    <version>0.13.1-cdh5.3.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-hdfs</artifactId> 
    <version>2.5.0-cdh5.3.1</version> 
</dependency> 
<dependency> 

Xin lưu ý rằng một số trong những phụ thuộc có thể không được yêu cầu

7

Trong trường hợp nếu bạn vẫn không giải quyết được vấn đề này, tôi đã thực hiện nó. Và tôi cần sự phụ thuộc sau cho nó để biên dịch và chạy:

libthrift-0.9.0-cdh5-2.jar 
httpclient-4.2.5.jar 
httpcore-4.2.5.jar 
commons-logging-1.1.3.jar 
hive-common.jar 
slf4j-api-1.7.5.jar 
hive-metastore.jar 
hive-service.jar 
hadoop-common.jar 
hive-jdbc.jar 
guava-11.0.2.jar 

Các tài liệu tổ ong có lẽ được viết chống lại một phiên bản cũ hơn/phân phối.

Ngoại lệ của bạn là do thiếu hadoop-common bình, trong đó có org.apache.hadoop.conf.Configuration.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã trả lời, tôi đã giải quyết được vấn đề, nhưng tôi không hài lòng với giải pháp vì vậy tôi đã không đăng nó. –

+1

Nhưng đó là giải pháp cho vấn đề của bạn. Vui lòng thỏa mãn bản thân. Bạn đã bỏ lỡ hadoop-common.jar – zytham

1

Đối với những người khác tự hỏi xung quanh về chính xác những gì được yêu cầu phải thực hiện từ xa một truy vấn Hive sử dụng java ...

mã Java

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

public class Runner 
{ 
     private static String driverName = "org.apache.hive.jdbc.HiveDriver"; 
     public static void main(String[] args) throws SQLException { 

       try { 
         // Register driver and create driver instance 
         Class.forName(driverName); 
       } catch (ClassNotFoundException ex) { 
         ex.printStackTrace(); 
       } 

       // get connection 
       System.out.println("before trying to connect"); 
       Connection con = DriverManager.getConnection("jdbc:hive2://[HOST IP]:10000/", "hive", ""); 
       System.out.println("connected"); 

       // create statement 
       Statement stmt = con.createStatement(); 

       // execute statement 
       stmt.executeQuery("show tables"); 

       con.close(); 
     } 
} 

Cùng với tệp pom với các phụ thuộc bắt buộc duy nhất ..

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test-executor</groupId> 
    <artifactId>test-executor</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
     <hadoop.version>2.5.2</hadoop.version> 
    </properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-exec</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-jdbc</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-hdfs</artifactId> 
     <version>${hadoop.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-common</artifactId> 
     <version>${hadoop.version}</version> 
    </dependency> 
</dependencies> 
</project> 
4

Nhận được lỗi tương tự khi cố gắng sử dụng hive-jdbc 1.2.1 so với hive 0.13. So sánh với danh sách dài trong các câu trả lời khác. Bây giờ chúng ta sử dụng hai:

hive-jdbc-1.2.1-standalone.jar 
hadoop-common-2.7.1.jar 

Một lưu ý phụ: bạn có thể nhận được 'Dòng bắt buộc 'client_protocol' là unset! 'khi sử dụng jdbc mới nhất đối với Hive cũ hơn. Nếu có, hãy thay đổi phiên bản jdbc thành 1.1.0:

<dependency> 
    <groupId>org.apache.hive</groupId> 
    <artifactId>hive-jdbc</artifactId> 
    <version>1.1.0</version> 
    <classifier>standalone</classifier> 
</dependency> 
1

Tôi đã gặp phải sự cố tương tự với phiên bản CDH5.4.1. Tôi đã cập nhật tệp POM của mình bằng mã bên dưới và nó hoạt động cho tôi.

Hadoop Version tôi là Hadoop 2.6.0-cdh5.4.1 và Hive phiên bản là Hive 1.1.0-cdh5.4.1

<dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-exec</artifactId> 
     <version>0.13.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-jdbc</artifactId> 
     <version>0.13.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.thrift</groupId> 
     <artifactId>libthrift</artifactId> 
     <version>0.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.thrift</groupId> 
     <artifactId>libfb303</artifactId> 
     <version>0.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-client</artifactId> 
     <version>2.6.0</version> 
    </dependency> 

tôi đã giải quyết với bản cập nhật POM này.

Các vấn đề liên quan