当前位置: 代码网 > 服务器>网络>https > HTTP方式在线访问Hadoop HDFS上的文件解决方案

HTTP方式在线访问Hadoop HDFS上的文件解决方案

2024年08月06日 https 我要评论
为了通过HTTP方式在线访问HDFS上的文件,您可以利用WebHDFS REST API或者HttpFS Gateway这两种机制实现。1:httpfs是cloudera公司提供的一个hadoop hdfs的一个http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问2:与WebHDFS的区别是不需要客户端可以访问hadoop集群的每一个节点,通过httpfs可以访问放置在防火墙后面的hadoop集群3:httpfs是一个Web应用,部署在内嵌的tomcat中。

 背景:

在做大数据和大模型产品的时候,方式设计的是将文件放在hdfs上进行管理,前几天遇到一个需求:需要通过http的方式去访问hdfs上的问题,以前基本上都是通过hdfs://hadoop01:9000,去访问文件,于是经过一番调研对这个进行一下总结,为后续做个记录。

为了通过http方式在线访问hdfs上的文件,您可以利用webhdfs rest api或者httpfs gateway这两种机制实现。以下是使用这两种方式访问hdfs文件的基本步骤。

注:本例使用的是hadoop2.7.x版本,请各位同学留意!

一、使用webhdfs rest api

1.httpfs简介

 2.webhdfs设置

做这个的前提是hadoop已经安装ok,没有任何问题了,如果安装hadoop步骤或问题,可参考博主的这篇文章:超详细的hadoop集群部署_hadoop部署-csdn博客

 namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的liststatus、listfilestatus等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的。

在namenode和一台datanode中向 etc/hadoop/conf/hdfs-site.xml中添加属性:

vi hdfs-site.xml

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>

3.使用说明

hadoop 2.x版本可能会监听在50070端口提供web界面

访问namenode的hdfs使用50070端口,访问datanode的webhdfs使用50075端口。访问文件、文件夹信息使用namenode的ip和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的ip和50075端口。要想不区分端口,直接使用namenode的ip和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hdfs-site.xml中的dfs.webhdfs.enabled为true。

4.curl 操作命令示例

(需要将 host 替换为实际部署 httpfs 的服务器 ip)

curl -c ~/.httpsauth "http://host:50070/webhdfs/v1?op=gethomedirectory&user.name=hdfs"

curl -b ~/.httpsauth "http://host:50070/webhdfs/v1?op=gethomedirectory"

curl -b ~/.httpsauth "http://host:50070/webhdfs/v1/test/data1.txt?op=open"

curl -b ~/.httpsauth -x delete "http://host:14000/webhdfs/v1/test/data1.txt?op=delete"
创建和追加都是分为两步,测试都没有成功 (注意,一定要追加 --header 参数,否则创建会失败)
curl -b ~/.httpsauth -i -x put "http://172.168.63.221:14000/webhdfs/v1/test2?op=create&buffersize=1000"
    curl -b ~/.httpsauth -i -x put -t data2.txt --header "content-type: application/octet-stream" "http://172.168.63.221:14000/webhdfs/v1/test2/data.txt?op=create&user.name=hdfs&buffersize=1000&data=true"

其他api:

创建并写一个文件
 curl -i -x put "http://localhost:50070/webhdfs/v1/<path>?op=create
 [&overwrite=<true|false>][&blocksize=<long>][&replication=<short>]
 [&permission=<octal>][&buffersize=<int>]“
 curl -i -x put -t <local_file> "http://<datanode>:<port>/webhdfs/v1/<path>?
 op=create...“
 注意这个地方填入的是datanode的信息
 

在一个文件内追加内容
 curl -i -x post "http://<host>:<port>/webhdfs/v1/<path>?op=append[&buffersize=<int>]”
 curl -i -x post -t <local_file> "http://<datanode>:<port>/webhdfs/v1/<path>?
 op=append...“
 注意该条命令获得的是datanode的信息。
 

打开并读取一个文件
 curl -i -l "http://<host>:<port>/webhdfs/v1/<path>?op=open
 [&offset=<long>][&length=<long>][&buffersize=<int>]“
 

创建一个目录
 curl -i -x put "http://<host>:<port>/<path>?op=mkdirs[&permission=<octal>]“
 

重名命文件、文件夹
 curl -i -x put "<host>:<port>/webhdfs/v1/<path>?op=rename&destination=<path>"
 

删除文件/文件夹
 curl -i -x delete "http://<host>:<port>/webhdfs/v1/<path>?op=delete [&recursive=<true|false>]“
 

文件/ 文件夹的状态信息
 curl -i “http://<host>:<port>/webhdfs/v1/<path>?op=getfilestatus“
 

目录列表
 curl -i "http://<host>:<port>/webhdfs/v1/<path>?op=liststatus”
 

获取目录的上下文环境汇总信息
 curl -i "http://<host>:<port>/webhdfs/v1/<path>?op=getcontentsummary"
 

获取check sum file
 curl -i "http://<host>:<port>/webhdfs/v1/<path>?op=getfilechecksum”
 

获取home 目录
 curl -i "http://<host>:<port>/webhdfs/v1/?op=gethomedirectory”
 

设置权限
 curl -i -x put "http://<host>:<port>/webhdfs/v1/<path>?op=setpermission [&permission=<octal>]“
 

设置所有者
 curl -i -x put "http://<host>:<port>/webhdfs/v1/<path>?op=setowner [&owner=<user>][&group=<group>]"
 

设置备份
 curl -i -x put "http://<host>:<port>/webhdfs/v1/<path>?op=setreplication [&replication=<short>]“

我使用的是查看所以用的是这个命令:

http://hadoop01:50070/webhdfs/v1/<path>?op=open

其中:

  • <namenode_http_address> 是namenode的http地址。
  • <http_port> 是webhdfs服务监听的http端口。
  • <path> 是hdfs文件系统的路径。
  • offset 和 length 是可选参数,用于指定读取文件的起始位置和长度。

5.身份验证

如果hadoop集群启用了安全性(如kerberos),则需要在http请求中包含有效的认证凭证(如spnego令牌)。

6.基于 java 操作 httpfs 的开源代码

开源项目地址,有什么问题可以直接反馈给我

    https://github.com/gitriver/httpfs-client

   说明

   1  包 com.catt.httpfs.client.httpclient 是采用 commons-httpclient.jar,
    基于 http 请求实现的,没有使用到 hadoop 相关的 jar
    2  包 org.apache.hadoop.fs.http.client 根据 httpfs 项目的源代码,
    根据需要修改了一下,使用了 hadoop 相关的 jar

二、使用httpfs gateway

1.安装和配置httpfs gateway

httpfs是一个独立的服务,需安装并在apache tomcat或其他servlet容器上运行。配置httpfs以连接到您的hadoop集群,并启动服务。

2.访问文件

使用类似于webhdfs的api调用,但通过httpfs gateway提供的url访问文件。例如:

无论是webhdfs还是httpfs,由于涉及到安全性和权限控制,可能还需要进行kerberos认证或简单的http基本认证。根据实际情况配置相应的身份验证机制。

请注意,在生产环境中,还需考虑网络策略和防火墙设置,以确保外部客户端能够通过http访问这些服务。同时,对于大规模文件或频繁访问的情况,通常建议结合使用代理服务器(如nginx)进行负载均衡和缓存优化。

引申:

1. httpfs: 基于http操作 hdfs文件系统

httpfs: 基于http操作hadoop hdfs文件系统 - 大数据处理技术研究、使用 - oschina - 中文开源技术交流社区

2. 利用javaapi访问hdfs的文件
    利用javaapi访问hdfs的文件_java api 访问hdfs 读取文件-csdn博客 

3. hadoop hdfs over http - documentation sets 2.2.0
   http://hadoop.apache.org/docs/r2.2.0/hadoop-hdfs-httpfs/index.html 

4. 

hadoop hdfs over http 2.2.0 - using http tools

http://hadoop.apache.org/docs/r2.2.0/hadoop-hdfs-httpfs/usinghttptools.html

5. hadoop rest api -webhdfs(上)
    http://www.tuicool.com/articles/yuznmj 

6. httpfs装配指南
   http://www.ylzx8.cn/gaoxingnenkaifa/cloud/1010950.html 

https://my.oschina.net/cloudcoder/blog/277426

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com