2016-05-30 53 views
0

我想连接到服务器上的配置单元数据库使用java程序。下面是java的代码:错误通过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(); 
    } 
} 

我为4个NoClassFoundExceptions添加了3个jar文件。 jar文件:

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文件。有没有任何主jar文件包含连接到hive数据库的所有jar文件?

最后我想通过java程序连接到配置单元。任何人都可以提供不同的代码或建议其他方式来解决这个问题?

+1

我会推荐Maven以transitively管理你的依赖关系。除此之外,我会认为Hive jdbc是你需要的所有 –

+0

@NaveenRamawat不,这是一个不同的错误 –

+1

可能重复的[如何解决这个Java类未找到异常?](http://stackoverflow.com/questions/ 17408769 /如何解决这个java类的未发现异常)或[如何解决java-lang-noclassdeffounderror](http://stackoverflow.com/questions/17973970/how -to-solve-java-lang-noclassdeffounderror) –

回答

0

如果使用hortonworks,他们已经通过以下两个jar捆绑所有你可以连接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");