1

i want to connect to hive database on server using java program. below is code of 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();
   }
}

i added 3 jar files for 4 NoClassFoundExceptions. jar files are :

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

now getting new NoClassFoundException as below :

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

every time this exception comes, i have to search for this class and download a jar file. is there any master jar file which contains all jars for connecting to hive database ?

at the end i want to connect to hive by java program. can anyone provide a different code or suggest other way round to this problem ?

KrunalParmar
  • 1,062
  • 2
  • 18
  • 31

2 Answers2

3

The libfb*-*.jar is missing in your CLASSPATH. Please make sure the necessary jars included in the CLASSPATH with correct version and without any duplication.

The following pages might be of help,

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

Kris
  • 1,618
  • 1
  • 13
  • 13
1

If you are using hortonworks , they have bundled all the jars..and you can connect by using below two jars:- 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

Also you can only connect only hive server 2 , so you connection string should be like the below one, use hive2 instead of hive.

 Connection con = DriverManager.getConnection("jdbc:hive2://hadoopip:10000/database","username", "password");
anwaar_hell
  • 756
  • 5
  • 23