我使用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完全不兼容?我在这里错过了什么吗?
答案 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兼容性的保证在这里较弱。