Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Required field 'client_protocol' is unset

Tags:

I am using Hive 0.12, and I'm trying the JDBC from apache. When I try to run the code, I get apache.thrift.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));     } } 

}

I imported all the necessary jars, and when I try to run my code, I get the following error:

 org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset!   Struct:TOpenSessionReq(client_protocol:null) 

How can I fix this?

like image 539
user3782579 Avatar asked Jul 11 '14 09:07

user3782579


1 Answers

This indicates a version mismatch between client and server, namely that the client is newer than the server, which is your case.

like image 99
Ihar Sadounikau Avatar answered Oct 08 '22 06:10

Ihar Sadounikau