可用服务

以下是可用的服务集:


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
标签: Hadoop