我们可以在HBase 0.98上使用0.94的客户端API运行为HBase 0.94编写的客户端程序,而无需修改或重新编译它们吗?

时间:2014-11-25 16:36:29

标签: hbase cloudera-cdh

HBase新手在这里尝试使用HBase 0.98.6(CDH 5.2)编写HBase 0.94.19版本的客户端程序。我已将HBase 0.98.6的jar添加到此客户端的类路径中。我收到此错误:java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Increment.setWriteToWAL(Z)Lorg/apache/hadoop/hbase/client/Increment

我在两个版本中都看到了方法签名,确实在返回类型方面存在差异。

0.94的签名:http://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/client/Increment.html#setWriteToWAL(boolean) [public Increment setWriteToWAL(boolean writeToWAL]的返回类型为增量。

0.98的签名:http://archive.cloudera.com/cdh5/cdh/5/hbase/apidocs/org/apache/hadoop/hbase/client/Mutation.html#setWriteToWAL(boolean) [public void setWriteToWAL(boolean write) ]

我读到Hadoop1和Hadoop2是二进制兼容的,但我不确定它是否也扩展到HBase。那么我可以以任何方式运行它,以便我不必修改代码或重新编译它吗?我想不是,但我想听听专家们的意见。

1 个答案:

答案 0 :(得分:1)

api没有改变mutch,可能有弃用的方法,但大多数应该是相同的。 但是你必须重新编译新版本。即使我们试图避免api变化太大,你也必须至少在主要版本之间重新编译。

同样在94/96之间,在rpc和有线协议方面进行了重大改写,这也是为什么你不能直接在96+服务器上运行94客户端的另一个原因。