NodeJS Hbase节俭奇怪

问题描述:

我遇到了一个非常奇怪的情况。我一直在尝试使用thrift来获取nodeJS客户端,以便运行Hbase,除了获取任何返回数据外,我似乎大部分时间都取得了成功。我正在运行hbase.0.94.8(目前是稳定版本),并且它确实正在运行,我正在运行节俭0.9.0,它也被构建并运行。与他们两个跑,我能查询HBase的与外壳,也得到了节俭的网页,但是当我运行下面的代码,没有任何反应:NodeJS 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肯定在运行,节俭肯定在运行,9095上的网页和9090上的服务(由日志报告)。日志似乎反映出什么都没有发生(即节俭和hbase日志似乎不受该请求的影响),但我确实获得了成功的连接。

有什么想法?

我有问题的答案。

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

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

你从不同的服务器来访问HBase的运行的节点文件脚本服务器?我问,因为我试图实现REST hbase连接,并且无法理解节点脚本如何运行。 – vbNewbie

为完整的文章http://dailyjs.com/2013/07/04/hbase/只需阅读并试图在OSX 10.9:

HBASE的节俭服务器必须与(标志“-f”)为节点的工作,像这样的帧传输开始。 1(Java 1.6.0_65),Hadoop(1.2.1)& HBase(0.94.15)通过Homebrew安装。

我开始节俭服务器用-f标志

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 
    }); 
+0

谢谢。有趣的是,这就是-f标志所做的事情(对传输进行架构,因为大概节点通过持久连接进行通信),所以我知道我只是犯了一个错误,不编辑我自己的代码。我会尝试联系dailyjs,看看他们是否让我编辑它。 –

+0

此外,我会保持协议密钥,因为它是信息。当然,TBinaryProtocol是默认的,但是通过节俭文档阅读的人可能不知道这一点。 –