2016-08-24 26 views
1

我試圖運行對構建節約舊貨Java客戶端0.9.0TProtocolException:在readMessageBegin缺少的版本,老客戶

您可以在這裏找到代碼: https://github.com/apache/hbase/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java

在CLASSPATH中,有libthrift -0.9.0.jar 我有以下幾點:

掃描表...

異常線程 「main」 java.secu rity.PrivilegedActionException: org.apache.thrift.protocol.TProtocolException:丟失版本 readMessageBegin,舊客戶端? org.apache.hadoop.hbase.thrift.DemoClient.main(DemoClient.java) javax.security.auth.Subject.doAs(Subject.java:422) java.security.AccessController.doPrivileged(Native Method)at :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) at org.apache.hadoop.hbase.thrift.DemoClient $ 1.run(DemoClient.java:82)

能有人給上什麼可能導致上面的提示?

感謝

回答

0

與HBase的版本不匹配。您的hbase客戶端lib比您要連接的服務器的lib舊。你在編譯什麼HBase版本?

MVN依賴性:樹

會列出項目的依賴關係。

+0

如果您需要幫助,請隨時發佈輸出。 –

+0

DemoClient來自hbase 1.1.2構建的相同lib目錄。很難看出客戶端如何與使用相同構建的服務器不同步。在pom.xml中的節點版本是0.9.0 – Ted

0

從CDH 5.3將服務器升級到Cloudera Hadoop 5.10後,我遇到了類似的問題。對我來說,關鍵是改變這一屬性設置爲false:

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

看來,HTTP協議是在CDH5.4.0加入我的服務器設置了此設置爲true。這與我客戶的TBinaryProtocol不兼容。