我有一个nodejs应用程序,想要将数据写入hadoop HDFS文件系统。我看到了两个主要的nodejs库可以实现它:node-hdfs和node-webhdfs。有人试过吗?有什么提示吗?在生产中应该使用哪个?
我倾向于使用node-webhdfs,因为它使用WebHDFS REST API。而node-hdfs似乎是c++绑定。
任何帮助都将不胜感激。
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
});
不是好消息!!!
不要使用node-hdfs。虽然它看起来很有前途,但现在已经过时两年了。我尝试编译它,但它与当前的libhdfs符号不匹配。如果你想使用类似的东西,你必须自己制作nodejs绑定。
你可以使用node-webhdfs,但在我看来,这并没有太大的优势。最好使用一个http nodejs库来发出自己的请求。这里最难的部分是尝试保持nodejs非常异步的本质,因为你可能希望首先创建一个文件夹,然后在成功创建它之后,创建一个文件,最后写入或追加数据。所有这些都通过你必须发送并等待答案才能继续的http请求完成....
至少node-webhdfs可能是一个很好的参考,让你看看并开始编写自己的代码。
敬礼,
Fabio Moreira