我有一个nodejs应用程序,我想将数据写入hadoop HDFS文件系统。我见过两个可以做到的主要nodejs库:node-hdfs和node-webhdfs。有人尝试过吗?任何提示?我应该在生产中使用哪一个?
我倾向于使用node-webhdfs,因为它使用WebHDFS REST API。 node-hdfs似乎是一个c ++绑定。
非常感谢任何帮助。
答案 0 :(得分:9)
您可能需要查看webhdfs库。它为WebHDFS REST API调用提供了简洁明了(类似于fs
模块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
});
答案 1 :(得分:4)
不是好消息!!!
不要使用node-hdfs。虽然看起来很有希望,但现在已经过时两年了。我试图编译它但它与当前libhdfs的符号不匹配。如果你想使用类似的东西,你必须使自己的nodejs绑定。
你可以使用node-webhdfs,但恕我直言,那里没有太大的优势。最好使用http nodejs lib来发出自己的请求。这里最难的部分是尝试保持nodejs的非同步特性,因为您可能首先需要创建一个文件夹,然后在成功创建它之后,创建一个文件,然后最后写入或追加数据。一切都通过http请求你必须发送并等待答案然后继续......
至少node-webhdfs可能是一个很好的参考,你可以看看并开始自己的代码。
BR, 法比奥莫雷拉