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

背景:

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

为了通过HTTP方式在线访问HDFS上的文件,您可以利用WebHDFS REST API或者HttpFS Gateway这两种机制实现。以下是使用这两种方式访问HDFS文件的基本步骤。

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

一、使用WebHDFS REST API

1.HTTPFS简介

1:httpfs是cloudera公司提供的一个hadoop hdfs的一个http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问

2:与WebHDFS的区别是不需要客户端可以访问hadoop集群的每一个节点,通过httpfs可以访问放置在防火墙后面的hadoop集群

3:httpfs是一个Web应用,部署在内嵌的tomcat中

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

http(s)://<NAMENODE_HTTP_ADDRESS>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=OPEN[&offset=<LONG>&length=<LONG>]

其中:

  • <NAMENODE_HTTP_ADDRESS> 是NameNode的HTTP地址。
  • <HTTP_PORT> 是WebHDFS服务监听的HTTP端口。
  • <PATH> 是HDFS文件系统的路径。
  • offsetlength 是可选参数,用于指定读取文件的起始位置和长度。

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访问文件。例如:

http(s)://<HTTPFS_SERVER>:<HTTPFS_PORT>/<PATH>?op=OPEN[&offset=<LONG>&length=<LONG>]

这里 <HTTPFS_SERVER><HTTPFS_PORT> 是HttpFS服务所在的服务器地址和端口。

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

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

引申:

  1. HTTPFS: 基于HTTP操作hadoop hdfs文件系统

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

  1. 利用JavaAPI访问HDFS的文件

利用JavaAPI访问HDFS的文件_java api 访问hdfs 读取文件-CSDN博客

  1. Hadoop HDFS over HTTP - Documentation Sets 2.2.0

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

Hadoop HDFS over HTTP 2.2.0 - Using HTTP Tools

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

  1. Hadoop REST API -WebHDFS(上)

http://www.tuicool.com/articles/yUZnMj

  1. httpfs装配指南

http://www.ylzx8.cn/gaoxingnenkaifa/cloud/1010950.html

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

相关推荐
ywyy679814 分钟前
「数智化聚合分销生态系统」定制开发:重构全渠道增长引擎
大数据·搜索引擎·微信小程序·小程序·系统·聚合分销系统·聚合分销
weixin_472339461 小时前
基于Elasticsearch的搜索引擎简介
大数据·elasticsearch·搜索引擎
MXsoft6181 小时前
监控易一体化运维:统计报表,为运维决策装上“智慧引擎”
大数据
Elastic 中国社区官方博客1 小时前
JavaScript 中使用 Elasticsearch 的正确方式,第一部分
大数据·开发语言·javascript·数据库·elasticsearch·搜索引擎·全文检索
ThomasChan1231 小时前
Win10 安装单机版ES(elasticsearch),整合IK分词器和安装Kibana
java·大数据·elasticsearch·搜索引擎·全文检索·jenkins·es
令狐少侠20112 小时前
elasticsearch之记录es7.17升级8.17 springboot2.7.0 程序改造坑
大数据·elasticsearch·jenkins
源码技术栈12 小时前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
Elastic 中国社区官方博客12 小时前
Elasticsearch 索引副本数
大数据·数据库·elasticsearch·搜索引擎·全文检索
Eternity......12 小时前
SparkSQL基本操作
大数据·spark
2685725912 小时前
Elasticsearch 初步认识
大数据·elasticsearch·搜索引擎·全文检索·es