2016-05-30 3 views
0

Я хочу подключиться к базе данных hive на сервере с помощью java-программы. ниже - код java:Ошибка Подключение к базе данных hive с помощью java-программы

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


public class HiveQueryJava { 

    private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; 

    public static void main(String[] args) throws SQLException { 

     // Register driver and create driver instance 
     Class.forName(driverName); 


     // get connection 
     Connection con = DriverManager.getConnection("jdbc:hive -hiveconf mapred.job.queue.name=queuename://ip:port/dbname", "uname", ""); 

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

     // execute statement 
     Resultset res = stmt.executeQuery("SELECT pincode FROM pincode_city_map LIMIT 5;"); 

     System.out.println("Result:"); 

     while (res.next()) { 
     System.out.println(res.getString(1)); 
     } 
     con.close(); 
    } 
} 

Я добавил 3 файла jar для 4 NoClassFoundExceptions. баночка файлы:

hive-service-0.11.0.jar 
libthrift-0.8.0.jar 
hive-jdbc-0.10.0.jar 
hive-metastore-0.10.0 

теперь получает новую NoClassFoundException, как показано ниже:

Exception in thread "main" java.lang.NoClassDefFoundError: com/facebook/fb303/FacebookService$Iface 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104) 
     at java.sql.DriverManager.getConnection(DriverManager.java:664) 
     at java.sql.DriverManager.getConnection(DriverManager.java:247) 
     at HiveQueryJava.main(HiveQueryJava.java:21) 
Caused by: java.lang.ClassNotFoundException: com.facebook.fb303.FacebookService$Iface 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 40 more 

каждый раз, когда приходит это исключение, я должен искать для этого класса и скачать файл фляги. есть ли файл jar master, содержащий все банки для подключения к базе данных улья?

в конце я хочу подключиться к улью по программе java. может ли кто-нибудь предоставить другой код или предложить другой путь к этой проблеме?

+1

Я бы порекомендовал Maven для транзитного управления вашими зависимостями. Кроме этого, я бы подумал, что Hive jdbc - это все, что вам нужно –

+0

@NaveenRamawat Нет, это другая ошибка –

+1

Возможный дубликат [Как устранить это исключение Java класса не найдено?] (Http://stackoverflow.com/questions/ 17408769/how-do-i-resolve-this-java-class-not-found-exception) или [how-to-solve-java-lang-noclassdeffounderror] (http://stackoverflow.com/questions/17973970/how -to-solve-java-lang-noclassdeffounderror) –

ответ

1

В вашем CLASSPATH отсутствует libfb * - *. Jar. Пожалуйста, убедитесь, что необходимые банки включены в CLASSPATH с правильной версией и без какого-либо дублирования.

Следующие страницы могут быть полезны,

http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/HiveJDBCDriver.html https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBCClientSampleCode

0

Если вы используете Hortonworks, они в комплекте все jars..and можно подключить с помощью ниже двух баночек: - http://repo.hortonworks.com/content/repositories/releases/org/apache/hadoop/hadoop-common/2.7.1.2.3.2.0-2950/hadoop-common-2.7.1.2.3.2.0-2950.jar http://repo.hortonworks.com/content/repositories/releases/org/apache/hive/hive-jdbc/1.2.1.2.3.2.0-2950/hive-jdbc-1.2.1.2.3.2.0-2950-standalone.jar

Также вы можете подключаться только к серверу с улей 2, поэтому строка подключения должна быть похожа на нижнюю, используйте hive2 вместо улья.

Connection con = DriverManager.getConnection("jdbc:hive2://hadoopip:10000/database","username", "password"); 
Смежные вопросы