我应该使用哪个nodejs库来写入hdfs?

slhcrj9b  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(635)

我有一个nodejs应用程序,我想将数据写入hadoop hdfs文件系统。我见过两个主要的nodejs库可以做到这一点:node hdfs和node webhdfs。有人试过吗?有什么提示吗?我应该在生产中使用哪一种?
我倾向于使用节点webhdfs,因为它使用webhdfs restapi。节点hdfs似乎是一个c++绑定。
任何帮助都将不胜感激。

dphi5xsq

dphi5xsq1#

您可能想查看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
});
jfewjypa

jfewjypa2#

不是好消息!!!
不要使用节点hdfs。虽然看起来很有希望,但现在已经过时两年了。我试图编译它,但它与当前libhdfs的符号不匹配。如果你想使用这样的东西,你就必须使自己的nodejs绑定。
你可以使用node-webhdfs,但是我觉得这没有什么优势。最好使用httpnodejs库来发出您自己的请求。这里最困难的部分是尽量保持nodejs的异步特性,因为您可能希望首先创建一个文件夹,然后在成功创建它之后,创建一个文件,最后写入或附加数据。所有通过http的请求,你必须发送并等待答案,然后继续。。。。
至少node-webhdfs可能是一个很好的参考,让您看看并开始自己的代码。
比尔,法比奥·莫雷拉

相关问题