3

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

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 日志似乎不受请求的影响),但我肯定获得了成功的连接。

有什么想法吗?

4

2 回答 2

5

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

我用 -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
    });
于 2014-01-15T15:45:31.460 回答
3

我有这个问题的答案。

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

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

[hbase-dir]/bin/hbase-daemon.sh start thrift -f
于 2013-07-02T21:46:43.380 回答