Se connecter de Java à Hive en utilisant JDBC
Je suis en train d'essayer de vous connecter à partir de Java pour la Ruche serveur 1.
J'ai trouvé une question de temps, dans ce forum, mais il ne fonctionne pas pour moi.
Je suis en utilisant ce code:
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", "hive", "");
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));
}
//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);
stmt.execute(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));
}
Que le code indiqué dans le guide. J'ai copié la ruche-metastore, service, jdbc, exec, de base et plus .jar dans le même chemin de la .java.
Quand je compile, j'obtiens ce message d'erreur:
java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at HiveJdbcClient.main(HiveJdbcClient.java:14)
Quelqu'un sait ce qui se passe ici?
source d'informationauteur adrian
Vous devez vous connecter pour publier un commentaire.
Essayer
au lieu de
J'espère que vous avez ajouté
Class.forName(driverName)
déclaration dans votre codeJe pense que dans votre question, vous avez dit sa Ruche serveur 1. Si donc le nom du pilote et de la chaîne de connexion doit être comme suit:
Si vous utilisez de la Ruche serveur 2 , alors il devrait être comme suit:
J'ai utilisé le même exemple que vous avez donné et je suis en mesure de se connecter Ruche avec dépendances suivantes dans mon pom.xml
u besoin de changer deux endroits
utiliser cette
au lieu de
et la deuxième est
utilisez cette
au lieu de