使用Node.js和WebHDFS REST API访问Hadoop HDFS数据
可用服务
以下是可用的服务集:
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并进行基本操作有所了解。祝一切顺利!
- Node.js项目实战-构建可扩展的Web应用(第一版):8 使用Express.js和Hapi构建Node.js REST API服务
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.3.使用Express和Mongoskin实现REST API服务器
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.4.重构:使用Hapi搭建REST API服务器
- Hadoop 第六课 WebHDFS REST API
- hadoop学习之-使用ODCH工具实现oralce外部表访问HDFS数据文件
- Node.js中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.1.REST(表述性状态传递)Representational State Transfer
- hadoop webhdfs rest api
- html调用hadoop WebHDFS REST API
- 使用NodeJS+AngularJS+MongoDB实现一个Web数据扒取-分析-展示的系统
- 使用 GitHub API 进行数据分析 (Node.js)
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.5.小结
- 使用Hadoop的JAVA API远程访问HDFS
- html调用hadoop WebHDFS REST API
- html调用hadoop WebHDFS REST API
- Hadoop web编程--REST API WebHDFS
- 使用Node.js和MongoDB通过Mongoshin和Express.js构建JSON REST API服务器
- Hadoop REST API -- WebHDFS(上)
- Hadoop REST API -- WebHDFS(下)
- Hadoop web编程--REST API WebHDFS