2016-12-06 6 views
0

beeline、hive2バージョン1.2.1000.2.5.0.0に接続中にこの例外が発生しました。Windows 10マシンでclasspathにhive-jdbc.jarファイルを追加しました。HortonworksでJdbcを使用してリモートでHiveに接続中にClassNotFoundExceptionが発生しました

例外:

java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at HiveJdbcClient.main(HiveJdbcClient.java:17) 

HiveJdbcClient.java

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

public class HiveJdbcClient { 

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

    public static void main(String[] args) throws SQLException { 
     try { 
     Class.forName(driverName); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    //replace "hive" here with the name of the user the queries should run as 
    Connection con = DriverManager.getConnection("jdbc:hive://localhost:10003/default", "", ""); 
    Statement stmt = con.createStatement(); 
    String tableName = "testHiveDriverTable"; 
    stmt.execute("drop table if exists " + tableName); 
    stmt.execute("create table " + tableName + " (key int, value string)"); 
    // show tables 
    String sql = "show tables '" + tableName + "'"; 
    System.out.println("Running: " + sql); 
    ResultSet res = stmt.executeQuery(sql); 
    if (res.next()) { 
     System.out.println(res.getString(1)); 
    } 
    } 
} 
  1. 私はここで追加する必要があり、他のどのようなjarファイルを確認していませんか?
  2. これらのjarファイルはHiveのバージョンに基づいて変更されますか?
  3. などClouderaのとHortonworksを別のjarファイルを持っている、これは非常に混乱して、このpageをご覧ください。
  4. それはハイブに接続するために非常に複雑ですなぜ、私がhttp://142.56.78.174:10003/defaultあるHortonworks、上の私のハイブを持っている、と私はクラスパスにハイブ-JDBCのjarファイルを追加したと私は以下の私のJavaクラスを持っています。これで足りないの?
  5. 本当に迷っていることを教えてください。

答えてくれてありがとうは、私はすでに、事前に

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

おかげでこれを試してみました!あなたは、最新のjar (例えば、バージョン2.1倍) を使用する場合

答えて

0

私はWindows上でそれを正常に実行できませんでした。だから、私はcentosに切り替えました。これはWindowsユーザーにとっても助けになるでしょう。どんな質問でもコメントしてください:)

1.2.1000.2.5.0.0にすべてのjarファイルを見つけるのは難しいので、1.2.1バージョンを試しました。私たちのnn2サーバーで作業しました。私はWindows上で多くの時間を無駄にしている、Linuxは非常に良い文書を持っています。

HiveJdbcClient.java:

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

public class HiveJdbcClient { 

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

    /** 
    * @param args 
    * @throws SQLException 
    */ 
    public static void main(String[] args) throws SQLException { 
     try { 
     Class.forName(driverName); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    //replace "hive" here with the name of the user the queries should run as 
    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", ""); 
    Statement stmt = con.createStatement(); 
    String tableName = "testHiveDriverTable"; 
    stmt.execute("drop table if exists " + tableName); 
    stmt.execute("create table " + tableName + " (key int, value string)"); 
    // show tables 
    String sql = "show tables '" + tableName + "'"; 
    System.out.println("Running: " + sql); 
    ResultSet res = stmt.executeQuery(sql); 
    if (res.next()) { 
     System.out.println(res.getString(1)); 
    } 
    } 
} 

上記は、あなたがそれらのファイルのいずれかを実行する前に、任意のマシンのクラスパスに、これらすべてのjarファイルを追加してください、私は私たちのNN2にしようとした簡単なプログラムであるあなたを努力している。私はいくつかのjarファイルが欠落しておりません願ってい

、これはエラーなしであなたのために働く必要があります。

  1. http://mvnrepository.com/artifact/org.apache.hive/hive-serde/1.2.1
  2. http://mvnrepository.com/artifact/org.apache.hive/hive-common/1.2.1
  3. http://mvnrepository.com/artifact/org.apache.hive/hive-shims/1.2.1
  4. http://mvnrepository.com/artifact/org.apache.hive/hive-beeline/1.2.1
  5. http://mvnrepository.com/artifact/org.apache.hive/hive-exec/1.2.1
  6. http://mvnrepository.com/artifact/org.apache.hive/hive-metastore/1.2.1
  7. http://mvnrepository.com/artifact/org.apache.hive/hive-service/1.2.1
  8. https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.2.5
  9. https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.2.1
  10. https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.3-alpha1
  11. https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.3.4
  12. https://mvnrepository.com/artifact/commons-logging/commons-logging/1.2
  13. https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common/2.2.0
  14. https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.21
  15. http://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/1.2.1

あなたはちょうどあなたが Linux上でこのコマンドを使用してそれを行うことができますクラスパスに追加することなく、接続をテストする場合:

コンパイル:

[[email protected] ~]# javac -cp .:hive-jdbc-1.2.1.jar:hive-service-1.2.1.jar:hive-exec-1.2.1.jar:hive-metastore-1.2.1.jar:hive-shims-1.2.1.jar:hive-beeline-1.2.1:hive-serde-1.2.1:hive-common-1.2.1:httpclient-4.2.5.jar:httpcore-4.2.1.jar:httpcore-4.3-alpha1.jar:httpclient-4.0-alpha4.jar:httpclient-4.3.4.jar:commons-logging-1.2.jar:hadoop-common-2.2.0.jar:slf4j-api-1.7.21.jar HiveJdbcClient.java 

実行します。

[[email protected] ~]# java -cp .:hive-jdbc-1.2.1.jar:hive-service-1.2.1.jar:hive-exec-1.2.1.jar:hive-metastore-1.2.1.jar:hive-shims-1.2.1.jar:hive-beeline-1.2.1:hive-serde-1.2.1:hive-common-1.2.1:httpclient-4.2.5.jar:httpcore-4.2.1.jar:httpcore-4.3-alpha1.jar:httpclient-4.0-alpha4.jar:httpclient-4.3.4.jar:commons-logging-1.2.jar:hadoop-common-2.2.0.jar:slf4j-api-1.7.21.jar HiveJdbcClient 

基本コマンドは

java -cp .:your-Jar-File1:your-Jar-File2:your-Jar-File3 yourMainClass.Java 
0

あなたは、最近のJDBCジャーにこの

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

代わりの

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

のために試してみてくださいなしありorg.apache.hadoop.hive.jdbc.HiveDriver

+0

ありがとう私はすでにこの 'private static String driverName =" org.apache.hive.jdbc.HiveDriver ";' – Jordon