2014-07-09 41 views
-5

運行以下代碼所需的設置和jar文件是什麼?我有jdk1.8.0_05,Hadoop 2.2.0和Hive 0.12.0。請幫忙。 我想在eclipse上運行這個代碼,但它不是編譯。我新增了約15個外部罐子,但沒有使用配置單元 - 運行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); 
    } 
    Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", ""); 
    Statement stmt = con.createStatement(); 
    String tableName = "testHiveDriverTable"; 
    stmt.executeQuery("drop table " + tableName); 
    ResultSet res = stmt.executeQuery("create table " + tableName + " (key int, value string)"); 
    // show tables 
    String sql = "show tables '" + tableName + "'"; 
    System.out.println("Running: " + sql); 
    res = stmt.executeQuery(sql); 
    if (res.next()) { 
     System.out.println(res.getString(1)); 
    } 
    // describe table 
    sql = "describe " + tableName; 
    System.out.println("Running: " + sql); 
    res = stmt.executeQuery(sql); 
    while (res.next()) { 
     System.out.println(res.getString(1) + "\t" + res.getString(2)); 
    } 

    // load data into table 
    // NOTE: filepath has to be local to the hive server 
    // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line 
    String filepath = "/tmp/a.txt"; 
    sql = "load data local inpath '" + filepath + "' into table " + tableName; 
    System.out.println("Running: " + sql); 
    res = stmt.executeQuery(sql); 

    // select * query 
    sql = "select * from " + tableName; 
    System.out.println("Running: " + sql); 
    res = stmt.executeQuery(sql); 
    while (res.next()) { 
     System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2)); 
    } 

    // regular hive query 
    sql = "select count(1) from " + tableName; 
    System.out.println("Running: " + sql); 
    res = stmt.executeQuery(sql); 
    while (res.next()) { 
     System.out.println(res.getString(1)); 
    } 
    } 
} 

錯誤::

拋出java.lang.ClassNotFoundException:org.apache.hadoop.hive.jdbc.HiveDriver 1 java.net.URLClassLoader的$。在java.net.URLClassLoader上運行(URLClassLoader.java:372)在java.net.URLClassLoader.findClass上的java.security.AccessController.doPrivileged(本地方法)上的$ 1.run(URLClassLoader.java:361)(URLClassLoader.java:360 )at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java .lang.Class.forName0(本地方法)位於HiveJdbcClient.main上的java.lang.Class.forName(Class.java:259)(HiveJd bcClient.java:15)

+0

什麼是產生的錯誤? – eliasah

回答

0

您必須將hive-jdbc-xxxx.jar添加到您的類路徑中。我不知道您有什麼Hadoop版本或Hadoop發行版,但是如果您使用的是最後一個Cloudera發行版,請從this archive下載hive-0.12.0-cdh5.0.2.tar.gz,並且包括/hive-0.12.0- cdh.5.0.2/hive-jdbc-0.12.0-cdh5.0.2.jar插入到您的java類路徑中。

0

以下步驟將幫助修復問題:

  1. 更換驅動類作爲org.apache.hive.jdbc.HiveDriver
  2. 添加hive-jdbc-<version>.jarcommon-logging-<version>.jar & hadoop-common-<version>.jar類路徑