我应该使用哪个Node.js库来写入HDFS?

8

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

我倾向于使用node-webhdfs,因为它使用WebHDFS REST API。而node-hdfs似乎是c++绑定。

任何帮助都将不胜感激。

2个回答

10
你可能想查看 webhdfs 库。它提供了一个良好且直接的(类似于 fs 模块 API)WebHDFS REST 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
});

这对我有效,一定要使用最新稳定版本的nodejs(不要用git repo,那会导致一些问题)。 - Havnar
你如何找到远程文件的路径? - Quintessa Anderson

5

不是好消息!!!

不要使用node-hdfs。虽然它看起来很有前途,但现在已经过时两年了。我尝试编译它,但它与当前的libhdfs符号不匹配。如果你想使用类似的东西,你必须自己制作nodejs绑定。

你可以使用node-webhdfs,但在我看来,这并没有太大的优势。最好使用一个http nodejs库来发出自己的请求。这里最难的部分是尝试保持nodejs非常异步的本质,因为你可能希望首先创建一个文件夹,然后在成功创建它之后,创建一个文件,最后写入或追加数据。所有这些都通过你必须发送并等待答案才能继续的http请求完成....

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

敬礼,
Fabio Moreira


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接