使用Node.js和WebHDFS REST API访问Hadoop HDFS数据
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
可用服务
以下是可用的服务集:
1)文件和目录操作
1.1创建和写入文件:CREATE(HTTP PUT)
1.2附加到文件:APPEND(HTTP POST)
1.3打开并读取文件:OPEN(HTTP GET)
1.4创建目录:MKDIRS(HTTP PUT)
1.5重命名文件/目录:RENAME(HTTP PUT)
1.6删除文件/目录:DELETE(HTTP DELETE)
1.7文件/目录的状态:GETFILESTATUS(HTTP GET)
1.8列出目录:LISTSTATUS(HTTP GET)
2)其他文件系统操作
2.1获取目录的内容摘要:GETCONTENTSUMMARY(HTTP GET)
2.2获取文件校验和:GETFILECHECKSUM(HTTP GET)
2.3获取主目录:GETHOMEDIRECTORY(HTTP GET)
2.4设置权限:SETPERMISSION(HTTP PUT)
2.5设置所有者:SETOWNER(HTTP PUT) )
2.6设置复制因子:SETREPLICATION(HTTP PUT)
2.7设置访问或修改时间:SETTIMES(HTTP PUT)
启用WebHDFS API
确保在hdfs-site.xml文件中将config参数dfs.webhdfs.enabled设置为 true(此配置文件可以在里面找到 {your_hadoop_home_dir}/etc/hadoop。
< 配置>
< property >
.....
</ property >
< property >
< name > dfs.webhdfs.enabled </ name >
< value > true </ value >
</ property >
</ configuration >
从Node.js连接到WebHDFS
我希望您熟悉Node.js和软件包安装。如果你不是,请详细说明。有一个npm模块,“node-webhdfs”,带有一个包装器,允许您访问Hadoop WebHDFS API。您可以使用npm安装node-webhdfs包:
npm install webhdfs
完成上述步骤后,您可以编写Node.js程序来访问此API。以下是帮助您解决的几个步骤。
导入依赖模块
以下是要导入的外部模块:
const WebHDFS = require(“webhdfs”);
var request = require(“request”);
准备连接URL
让我们准备连接URL:
让 url = “http:// <<你的hdfs主机名在这里>>” ;
let port = 50070 ; //如果你使用不同的端口,请在这里更改
让 dir_path = “<< hdfs文件夹的路径>>” ;
let path = “/ webhdfs / v1 /” + dir_path + “?op = LISTSTATUS&user.name = hdfs” ;
let full_url = url + ':' + port + path ;
列出目录
获取API并获得结果:
request(full_url,function(error,response,body){
如果(!错误 && 响应。的StatusCode == 200){
控制台。log(“.. response body ..”,body);
让 jsonStr = JSON。解析(身体);
让 myObj = jsonStr。FileStatuses。FileStatus ;
让 objLength = 对象。条目(myObj)。长度 ;
控制台。log(“..文件夹中的文件数:”,objLength);
} else {
控制台。log(“.. errorrorured!..”);
}
}
以下是LISTSTATUSAPI 的示例请求和响应 :
https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#LISTSTATUS
获取并显示 HDFS 文件的内容
使用路径分配HDFS文件名:
let hdfs_file_name = '<<HDFS file path>>' ;
以下代码将使用WebHDFS 客户端而不是我们在上一节中使用的请求模块连接到HDFS :
让 hdfs = WebHDFS。createClient({
user:“<< user >>”,
主持人:“<< host / IP >>”,
端口:50070,//如果您使用不同的端口,请在此处更改
路径:“webhdfs / v1 /”
});
以下代码将读取并显示HDFS文件的内容,
让 remoteFileStream = hdfs。createReadStream(hdfs_file_name);
remoteFileStream。on(“error”,函数 onError(err){ //在读取时处理错误
//对错误做点什么
控制台。log(“... error:”,err);
});
let dataStream = [];
remoteFileStream。on(“data”,函数 onChunk(chunk){ //读取成功
//对数据块执行某些操作
dataStream。推(块);
控制台。log('.. chunk ..',chunk);
});
remoteFileStream。on(“完成”,函数 onFinish(){ //读取完成
控制台。log('..完成..');
控制台。log('.. file data ..',dataStream);
});
以下是OPEN API的示例请求和响应:
https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#OPEN
如何读取目录中的所有文件
这不是直截了当的,因为我们没有直接的方法,但我们可以通过组合上述两个操作来实现它 - 读取目录然后逐个读取该目录中的文件。
结论
我希望您对通过使用Node和WebHDFS模块连接到HDFS并进行基本操作有所了解。祝一切顺利!
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |