2013-07-02 3 views
2

Я столкнулся с очень странной ситуацией. Я пытался получить 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 определенно работает, бережливость определенно работает, веб-страница на 9095 и услуга на 9090 (как сообщают журналы). Журналы, похоже, отражают, что ничего не происходит (т. Е. Журнал бережливости и hbase, кажется, не затронут запросом), но я определенно получаю успешную связь.

Любые мысли?

ответ

3

У меня есть ответ на вопрос.

Прежде чем дать это, я просто хочу предисловие, сказав, что я действительно думаю, что вопрос, который я задал, важен, потому что ответ был очевиден и все же тонкий. Возможно, более ранние версии бережливости отличаются друг от друга, но на 0,9 фреймовом транспорте по умолчанию не включен, и он должен быть включен для узла. Ни один учебник или объяснение hbase, бережливости и узла не упоминает об этом, поэтому он заслуживает того, чтобы быть где-то в Интернете.

бережливость сервер Hbase должен быть запущен с рамкой транспорта на (флаг «-f») для узла работать, например, так:

[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. 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 является дефолтом, но кто-то, просматривающий документацию по экономичности, может этого не знать. –

Смежные вопросы