8

nodejs アプリケーションがあり、hadoop HDFS ファイル システムにデータを書き込みたいと考えています。node-hdfs と node-webhdfs の 2 つの主要な nodejs ライブラリを見てきました。誰かがそれを試しましたか?ヒントはありますか?本番環境ではどちらを使用する必要がありますか?

WebHDFS REST API を使用するため、node-webhdfs を使用する傾向があります。node-hdfs は c++ バインディングのようです。

どんな助けでも大歓迎です。

4

2 に答える 2

10

webhdfsライブラリをチェックアウトすることをお勧めします。fsこれは、WebHDFS REST API 呼び出し用の(モジュール API に似た) 素晴らしく簡単なインターフェイスを提供します。

リモートファイルへの書き込み:

var WebHDFS = require('webhdfs');
var hdfs = WebHDFS.createClient();

var localFileStream = fs.createReadStream('/path/to/local/file');
var remoteFileStream = hdfs.createWriteStream('/path/to/remote/file');

localFileStream.pipe(remoteFileStream);

remoteFileStream.on('error', function onError (err) {
  // Do something with the error
});

remoteFileStream.on('finish', function onFinish () {
  // Upload is done
});

リモートファイルからの読み取り:

var WebHDFS = require('webhdfs');
var hdfs = WebHDFS.createClient();

var remoteFileStream = hdfs.createReadStream('/path/to/remote/file');

remoteFileStream.on('error', function onError (err) {
  // Do something with the error
});

remoteFileStream.on('data', function onChunk (chunk) {
  // Do something with the data chunk
});

remoteFileStream.on('finish', function onFinish () {
  // Upload is done
});
于 2014-02-13T10:42:26.103 に答える
5

朗報じゃない!!!

node-hdfs は使用しないでください。有望そうに見えますが、現在では 2 年間使用されていません。コンパイルしようとしましたが、現在の libhdfs のシンボルと一致しません。そのようなものを使用したい場合は、独自の nodejs バインディングを作成する必要があります。

node-webhdfs を使用できますが、私見ではそれほど利点はありません。独自のリクエストを作成するには、http nodejs ライブラリを使用することをお勧めします。ここで最も難しいのは、nodejs の非常に非同期な性質を保持しようとすることです。最初にフォルダーを作成し、正常に作成した後にファイルを作成し、最後にデータを書き込みまたは追加する必要があるからです。送信して応答を待つ必要があるすべての http 要求を介して、次に進みます....

少なくとも node-webhdfs を参照して、独自のコードを開始してください。

Br、ファビオ・モレイラ

于 2014-02-07T18:03:16.090 に答える