TProtocolException:旧客户端readMessageBegin中缺少版本

时间:2016-08-24 20:56:52

标签: java hadoop thrift

我试图运行一个针对thrift 0.9.0构建的thrift Java客户端

你可以在这里找到代码: https://github.com/apache/hbase/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java

在类路径中,有libthrift-0.9.0.jar 我得到了以下内容:

  

扫描表......

     

线程中的异常" main" java.security.PrivilegedActionException:   org.apache.thrift.protocol.TProtocolException:缺少版本   readMessageBegin,老客户端?在   java.security.AccessController.doPrivileged(Native Method)at   javax.security.auth.Subject.doAs(Subject.java:422)at   org.apache.hadoop.hbase.thrift.DemoClient.main(DemoClient.java:81)   引起:org.apache.thrift.protocol.TProtocolException:丢失   readMessageBegin中的版本,旧客户端?在   org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:213)     在   org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)     在   org.apache.hadoop.hbase.thrift.generated.Hbase $ Client.recv_getTableNames(Hbase.java:903)     在   org.apache.hadoop.hbase.thrift.generated.Hbase $ Client.getTableNames(Hbase.java:891)     在org.apache.hadoop.hbase.thrift.DemoClient.run(DemoClient.java:142)     在   org.apache.hadoop.hbase.thrift.DemoClient.access $ 000(DemoClient.java:56)     在   org.apache.hadoop.hbase.thrift.DemoClient $ 1.run(DemoClient.java:85)     在   org.apache.hadoop.hbase.thrift.DemoClient $ 1.run(DemoClient.java:82)

有人可以暗示可能导致上述情况的原因吗?

由于

2 个答案:

答案 0 :(得分:0)

版本与hbase不匹配。您的hbase客户端lib比您要连接的服务器的lib旧。您编译的HBase版本是什么?

  

mvn依赖:树

将列出项目的依赖项。

答案 1 :(得分:0)

从CDH 5.3升级服务器到Cloudera Hadoop 5.10后,我遇到了类似的问题。对我来说,关键是将此属性更改为false:

<property>
<name>hbase.regionserver.thrift.http</name>
<value>false</value>
</property>

似乎在CDH5.4.0中添加了HTTP协议,我的服务器设置将此设置设置为true。这与我的客户的TBinaryProtocol不兼容。