1

中間ファイルなしで Node.js から Flume-NG にデータを移動できる機能的なプロジェクトはありますか?

Node.js から Flume にデータを移動することはより一般的なニーズだと思っていましたが、そうではないようです。

これを試みたと思われる多くのプロジェクトを見つけましたが、すべて約 3 年前に放棄されたようで、現在のバージョンでは機能しません。古いバージョンのflumeでも動作するものがあるようですが、APIはflume-ngで大幅に変更され、適用できなくなりました。

Node.js 用の avro および thrift モジュールを見つけました。thrift には node.js のサポートがあり、これは単純明快であることを示しているように見えますが、これは機能していません。Flume で使用するトランスポート/プロトコルに関する十分な情報がない可能性があります。 -NG、または単によく理解していないだけかもしれません。

車輪を再発明する前に、誰かが私を正しい方向に向けることができますか?

これは私が持っている現在のノードコードです。ECONNREFUSED を生成します。

#!/usr/local/bin/node

var thrift = require('thrift');
//var ThriftTransports = require('thrift/transport');
//var ThriftProtocols = require('thrift/protocol');

var Flume = require('./gen-nodejs/ThriftSourceProtocol');
var ttypes = require('./gen-nodejs/flume_types');

transport = thrift.TBufferedTransport();
protocol = thrift.TBinaryProtocol();
//transport = ThriftTransports.TBufferedTransport();
//protocol = ThriftProtocols.TBinaryProtocol();
var connection = thrift.createConnection("127.0.0.1", 51515,{
        transport: transport,
        protocol: protocol
});

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

var client = thrift.createClient(Flume, connection);


var myEvent = new ttypes.ThriftFlumeEvent();
myEvent.headers = {};
myEvent.body = "body";

client.append(myEvent, function(err,data) {
  if (err) {
    // handle err
  } else {
    // data == [ttypes.ColumnOrSuperColumn, ...]
  }
  connection.end();
});
4

1 に答える 1

1

これは、 FLUME-1894のThriftSource.javaファイルに実装された Thrift サーバーのセットアップです。

  args.protocolFactory(new TCompactProtocol.Factory());
  args.inputTransportFactory(new TFastFramedTransport.Factory());
  args.outputTransportFactory(new TFastFramedTransport.Factory());
  args.processor(new ThriftSourceProtocol.Processor<ThriftSourceHandler>(new ThriftSourceHandler()));

動作させるには、クライアント側で互換性のあるスタックを使用する必要があります。

  • コンパクトなプロトコル
  • 高速フレーム トランスポート

ThriftRpcClient.javaにはすでにクライアント実装があるため、車輪を再度発明する必要はありません。

于 2014-04-30T08:44:13.193 に答える