Hbase节俭CDH 5

我正在使用Node.js Thrift API连接到Hbase。 一切工作都很好,直到我将CDH 4.6升级到CDH 5.升级后,我用这个脚本重新生成了Node.js的Thrift API:

thrift --gen js:node /opt/cloudera/parcels/CDH-5.0.0-1.cdh5.0.0.p0.47/lib/hbase/include/thrift/hbase2.thrift 

用新生成的脚本replace原始的Node.js脚本后,一切都停止了。

您可以在https://github.com/lgrcyanny/Node-HBase-Thrift2上查看演示中的新脚本和基本方法

当我运行“get”方法时,它返回“内部error handling获取”。

当我运行'put'方法时,它返回“无效方法名称:'put'”。

好像新的Thrift API完全不兼容? 我在这里错过了什么?

HBase有两个Thrift IDL文件:

  • HBase的,节俭/ src目录/主/资源/组织/阿帕奇/的Hadoop / HBase的/节俭/ Hbase.thrift
  • HBase的,节俭/ src目录/主/资源/组织/阿帕奇/的Hadoop / HBase的/ thrift2 / Hbase.thrift

两者都有一个get()方法,但其中只有一个有put()方法,这正是你上面的错误信息告诉我们的。

引用包摘要页面:

HBase目前有2个节点服务器实现,包:

  • org.apache.hadoop.hbase.thrift:这可能有一天被标记为depreceated。

  • org.apache.hadoop.hbase.thrift2:ie这个包。 这是为了与HTable接口紧密匹配,并有一天取代旧的节俭(旧的节俭模仿API HBase不再有)。

此外, 安装指南还为此提供了一个单独的部分:

CDH 5 HBase兼容性

CDH 5 HBase不与CDH 4 […]兼容。 因此,从CDH 4到CDH 5的滚动升级是不可能的,因为现有的CDH 4 HBase客户端无法向CDH 5服务器发出请求,而CDH 5 HBase客户端无法向CDH 4服务器发出请求。 然而,Thrift和REST代理服务器的客户端保留了CDH 4和CDH 5之间的线路兼容性。[…]

HBase用户API(Get,Put,Result,Scanner等;请参阅Apache HBase API文档)已经发展并且已经做出努力来确保HBase客户端是源代码兼容的,因此应该重新编译而不需要任何源代码修改。 但是,这不能保证,因为转换到ProtoBufs,一些相对模糊的API已经被删除。 还进行了一些基本的努力来保持与高级API(例如filter和协处理器)的重新编译兼容性。 这些高级API仍在不断发展,我们对API兼容性的保证在这里变得更弱。