博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Node.js和WebHDFS REST API访问Hadoop HDFS数据
阅读量:6861 次
发布时间:2019-06-26

本文共 2473 字,大约阅读时间需要 8 分钟。

可用服务

以下是可用的服务集:

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 > < name > dfs.webhdfs.enabled
< value > true

</ 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 的示例请求和响应 :

获取并显示 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的示例请求和响应:

如何读取目录中的所有文件

这不是直截了当的,因为我们没有直接的方法,但我们可以通过组合上述两个操作来实现它 - 读取目录然后逐个读取该目录中的文件。

结论

我希望您对通过使用Node和WebHDFS模块连接到HDFS并进行基本操作有所了解。祝一切顺利!

转载地址:http://qchyl.baihongyu.com/

你可能感兴趣的文章
如何衡量系统内存健康程度: memdelay简介
查看>>
CentOS查看主板型号、CPU、显卡、硬盘等信息
查看>>
Tomcat 系统架构
查看>>
LeSS is More - 大规模敏捷开发框架LeSS实践(一)
查看>>
车企纷抢无人驾驶赛道,中国智能汽车确定将立法
查看>>
SQL*PLUS常用命令
查看>>
WCF服务创建与使用(双工模式)
查看>>
linux运维基础篇 unit14
查看>>
VR Cinema 来了!未来的影院也许是酱紫滴
查看>>
sed简析
查看>>
zyUpload+struct2完成文件上传
查看>>
2017年10月31日结束Outlook 2007与Office 365的连接
查看>>
CURL常用命令
查看>>
物联网安全分析
查看>>
rails设置表单默认值&amp;&amp;隐藏表单
查看>>
hdu3635 Dragon Balls(带权并查集)
查看>>
如何让低版本IE浏览器支持HTML5和CSS3
查看>>
《你不知道的JavaScript》整理(六)——强制类型转换
查看>>
42、BGP常用命令及注意事项
查看>>
附录C 编译安装Hive
查看>>