8

我有一个 nodejs 应用程序,我想将数据写入 hadoop HDFS 文件系统。我见过两个主要的 nodejs 库可以做到这一点:node-hdfs 和 node-webhdfs。有人试过吗?有什么提示吗?我应该在生产中使用哪一个?

我倾向于使用 node-webhdfs,因为它使用 WebHDFS REST API。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。虽然看起来很有希望,但现在已经过时两年了。我试图编译它,但它与当前 libhdfs 的符号不匹配。如果你想使用类似的东西,你必须制作自己的 nodejs 绑定。

您可以使用 node-webhdfs 但恕我直言,这没有太大优势。最好使用 http nodejs lib 发出您自己的请求。这里最困难的部分是尝试保持 nodejs 的异步特性,因为您可能希望首先创建一个文件夹,然后在成功创建它之后创建一个文件,然后最后写入或附加数据。通过 http 请求的所有内容,您必须发送并等待答案,然后继续....

至少 node-webhdfs 可能是一个很好的参考,你可以看看并开始你自己的代码。

Br, 法比奥·莫雷拉

于 2014-02-07T18:03:16.090 回答