CDH 5中的Hbase Thrift

时间:2014-04-04 23:52:31

标签: node.js hbase thrift

我使用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

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

您可以在我尝试在https://github.com/lgrcyanny/Node-HBase-Thrift2

上运行的演示中查看新脚本和基本方法

当我运行' get'方法,它返回"内部错误处理得到"。

当我运行' put'方法,它返回"无效的方法名称:' put'"。

似乎新的Thrift API完全不兼容?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:3)

HBase附带两个Thrift IDL文件:

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

package summary页面引用:

  

HBase目前有2个thrift服务器实现   包裹:

     
      
  • org.apache.hadoop.hbase.thrift:这可能有一天会如此   标记为堕落。

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

  •   

install guides还有针对该场景的单独部分:

  

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的重新编译兼容性   例如过滤器和协处理器。这些高级API仍然存在   不断发展,我们对API兼容性的保证在这里较弱。