我试图运行一个针对thrift 0.9.0构建的thrift 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)
有人可以暗示可能导致上述情况的原因吗?
由于
答案 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不兼容。