I am getting an error when using the Hive JDBC driver:
java.lang.NoSuchMethodError:
org.apache.thrift.EncodingUtils.setBit(BIZ)B
I've seen several messages suggesting that this is a problem due to different
thrift jars in hbase and hive. To avoid this problem, I copied the Hive thrift
jar (libthrift-0.9.0.jar) into the hbase/lib directory (and verified, with ps,
that it's being picked up in the class path.) Alas, I still get the error.
Individually, Hadoop, HBase and Hive all run fine.
The ps output does not show any other java process using any other =
version of libthrift.
Here are the versions that I'm using:
hadoop: 1.2.1
hbase: 0.94.12
hive: 0.10.0
The code that triggers the problem is simple:
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
Connection con =
DriverManager.getConnection("jdbc:hive://127.0.0.1:10000/default", "", "");
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery("show tables");
// code blows up on next statement
while(res.next())
{
String str = res.getString(0);
System.out.println(str);
}
res.close();
stmt.close();
con.close();
The abbreviated stack trace looks like:
java.lang.NoSuchMethodError: org.apache.thrift.EncodingUtils.setBit(BIZ)B
at
org.apache.hadoop.hive.service.ThriftHive$fetchN_args.setNumRowsIsSet(ThriftHive.java:2401)
at
org.apache.hadoop.hive.service.ThriftHive$fetchN_args.setNumRows(ThriftHive.java:2388)
at
org.apache.hadoop.hive.service.ThriftHive$Client.send_fetchN(ThriftHive.java:157)
at
org.apache.hadoop.hive.service.ThriftHive$Client.fetchN(ThriftHive.java:150)
at
org.apache.hadoop.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:138)
Any clues as to what I should try next would be appreciated.