2013-07-02 29 views
2

我遇到了一個非常奇怪的情況。我一直在嘗試使用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日誌似乎不受該請求的影響),但我確實獲得了成功的連接。

有什麼想法?

回答

3

我有問題的答案。

在我給出之前,我只想說我實際上認爲我提出的問題很重要,因爲答案很明顯,但很微妙。也許早期的節儉版本是不同的,但在0.9.0框架傳輸默認情況下是不開啓的,它需要在節點上。沒有關於hbase,節儉和節點的教程或解釋提到這一點,所以它應該在互聯網上的某個地方。

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

你從不同的服務器來訪問HBase的運行的節點文件腳本服務器?我問,因爲我試圖實現REST hbase連接,並且無法理解節點腳本如何運行。 – vbNewbie

5

爲完整的文章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是默認的,但是通過節儉文檔閱讀的人可能不知道這一點。 –