2015-02-27 18 views
6

Orada burada bir soru connect from java to Hive ama benimki makine1 çalışan farklıBağlan Kovanı thorugh Java JDBC

Benim kovanı ve ben machine2 çalışan Java sunucusunu kullanarak bazı sorgular geçmeleri gerekiyor. Anladığım kadarıyla Hive, uzak sorguları almak amacıyla bir JDBC arayüzüne sahip. Ben buradan kod aldı -

HiveServer2 Clients ben maddede yazılı bağımlılıkları yüklü: -

  1. kovan-jdbc * .jar
  2. kovan hizmet * .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-günlük-1.0.4.jar

Ancak derleme zamanında Tam Hata java.lang.NoClassDefFoundError hata var:

Hive Error

-
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) 

StackOverflow başka soru Maven içinde Hadoop API bağımlılıkları eklemek için tavsiye

Bir müşterinin Hive ile bağlantı kurması için neden bir API API'sine ihtiyaç duyduğumu anlamıyorum. JDBC sürücüsü, temel sorgu sisteminin agnostik olmamalıdır? Sadece bazı SQL sorgularını geçmem gerekiyor mu?

Düzenleme: Cloudera (5.3.1) kullanıyorum , ben CDH bağımlılıkları eklemek gerek. Cloudera örneği, hadoop 2.5.0 ve HiveServer2

'u çalıştırıyor, ancak sunucular makinede 1 çalışıyor. Makine üzerinde kod en azından derlenmeli ve yalnızca çalışma zamanında sorunlara sahip olmalıyım!

+0

Hadoop ve kovanın sürümü nedir? –

cevap

2

Kendi sorumu yanıtlama!

Bazı isabetler ve deneme sürümleriyle, pom dosyamda aşağıdaki bağımlılıkları ekledim ve o zamandan beri hem CHD 5.3.1 ve 5.2.1 kümelerinde kod çalıştırabilirim.

<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> 

bu bağımlılıkları bazı

tam java kullanarak uzaktan HIVE sorguyu yürütmek için nelerin gerekli olduğunu konusunda etrafında merak Diğerleri için
7

Eğer hala bunu çözmediysen, ona bir şey verdim.

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 

kovan belgeler muhtemelen eski sürüm/dağıtım karşı yazılır: derlemek ve çalıştırmak için Ve şu bağımlılıkları gerekli.

Sizin istisnanız, org.apache.hadoop.conf.Configuration numaralı hadoop-common eksikliğinden kaynaklanıyor.

Bu yardımcı olur umarım.

+0

Cevabınız için teşekkür ederiz, sorunu çözdüm, ancak çözümden çok memnun kalmam, bu yüzden göndermedim. –

+1

Ama senin sorununun çözümü. Lütfen kendinizi tatmin edin. Hadoop-common.jar'ı kaçırdınız – zytham

1

gerekli olmayabilir lütfen unutmayın ...

Java kodu

Gereken tek bağımlılıkları ile pom dosyası ile birlikte
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(); 
     } 
} 

..

<?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

Hive-jdbc 1.2.1'i kovan 0.13'e karşı kullanmaya çalışırken aynı hatayı alın. Diğer cevaplarda uzun listeye kıyasla. Şimdi bu ikisi kullanın:

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

başka yan not: Eğer 'Gerekli alan 'client_protocol' ayarlanmazsa alabilirsiniz! 'eski bir Hive karşı son jdbc kullanırken. Eğer öyleyse, 1.1.0 için jdbc sürümünü değiştirin: Ben CDH5.4.1 sürümü ile aynı sorunu karşılaştı

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

. POM dosyasını aşağıdaki kod ile güncelledim ve benim için çalıştı.

Benim Hadoop Versiyon Hadoop 2.6.0-cdh5.4.1 ve bu POM güncelleme ile çözmüş 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> 

kovan sürümüdür.