NodeJS Hbase节俭古怪

时间:2013-07-02 00:10:08

标签: node.js hbase thrift

我遇到了一个非常奇怪的情况。我一直在尝试使用thrift来运行一个nodeJS客户端来运行Hbase,除了获取任何返回数据之外,我看起来大部分都是成功的。我正在运行hbase.0.94.8(目前是稳定版本),它肯定在运行,我正在运行节俭0.9.0,它也已经构建并运行。在它们都运行的情况下,我可以使用shell查询Hbase并访问thrift网页,但是当我运行以下代码时,没有任何反应:

var thrift = require('thrift'),
HBase = require('./Hbase.js'),
HBaseTypes = require('./Hbase_types.js');

var connection = thrift.createConnection('localhost',9090,{ transport: thrift.TBufferedTransport,protocol:thrift.TBinaryProtocol });

connection.on('connect',function(){
  console.log('connected');
  var client = thrift.createClient(HBase,connection);
    client.getTableNames(function(err,data){
    if(err)
        console.log('there was an error:',err);
    else
        console.log('hbase tables:',data);
    });
});

connection.on('error',function(err){
    console.log('error',err);
});

我肯定会得到一个连接(或者至少是连接事件触发),但是就像在另一端没有任何东西。在您回答之前,Hbase master肯定在运行,thrift肯定在运行,9095上的网页和9090上的服务(由日志报告)。日志似乎反映出甚至没有发生任何事情(例如,thrift和hbase日志似乎不受请求的影响),但我肯定会成功连接。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

阅读完整的文章http://dailyjs.com/2013/07/04/hbase/并在OSX 10.9.1(Java 1.6.0_65)上尝试使用Hadoop(1.2.1)&通过Homebrew安装HBase(0.94.15)。

我用-f标志启动了thrift服务器

    hbase-daemon.sh start thrift -f

我发现连接设置需要一点改变

    connection = thrift.createConnection('localhost', 9090, {
        transport: thrift.TFramedTransport,  //TBufferedTransport doesn't work!
        //protocol: thrift.TBinaryProtocol   //protocol seems not required
    });

答案 1 :(得分:3)

我有问题的答案。

在我给它之前,我只想先说我实际上认为我提出的问题很重要,因为答案很明显而且很微妙。也许早期版本的thrift是不同的,但在0.9.0框架传输默认情况下不启用它需要在节点上打开。没有关于hbase,thrift和node的教程或解释提到这一点,所以它应该在互联网上的某个地方。

Hbase的thrift服务器必须启动帧传输(标志“-f”)才能使节点正常工作,如下所示:

[hbase-dir]/bin/hbase-daemon.sh start thrift -f