Le champ obligatoire 'client_protocol' est désactivé
Je suis l'aide de la Ruche à 0,12$, et je suis en train de JDBC à partir de apache. Lorsque j'essaie d'exécuter le code, j'obtiens apache.l'épargne.TApplicationException.
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));
}
}
}
J'ai importé tous les pots, et lorsque j'essaie d'exécuter mon code, j'obtiens l'erreur suivante:
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
Comment puis-je résoudre ce problème?
source d'informationauteur user3782579 | 2014-07-11
Vous devez vous connecter pour publier un commentaire.
Cela indique une incompatibilité de version entre le client et le serveur, à savoir que le client est plus récent que le serveur, ce qui est votre cas.
Suis même question. Il fonctionne si vous définissez
ruche JDBC Repo Maven version 1.1.0 .
Cochez cette jira. Nouveau ruche-jdbc version n'est pas pris en charge avec la Ruche de 0,13.
https://issues.apache.org/jira/browse/HIVE-6050
Ajouter ceci dans votre pom.
Gars-là, même j'ai été confronté au même problème et aller la solution en faisant les étapes suivantes
De l'étape 01:- Inclure la Ruche lib pots sur le vôtre eclipse(qui jamais peut-être l'IDE) en utilisant le lien ci-dessous.
http://mirrors.supportex.net/apache/hive/hive-1.0.1/ (apache-hive-1.0.1-bin.tar.gz)
Étape 02: ajouter hadoop-core-1.1.0 pot
que tout le monde n'a mentionné cette erreur se produit en raison de l'incompatibilité de version avec hadoop autonome et hadoop de base.