最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然。
httpfs其实是使用http协议访问hdfs文件系统:
HttpFS是一台提供REST HTTP网关的服务器,该网关支持所有HDFS文件系统操作(读取和写入)。并且可以与webhdfs REST HTTP API 互操作。
HttpFS可用于在运行不同版本Hadoop的群集之间传输数据(克服RPC版本问题),例如使用Hadoop DistCP。
HttpFS可用于访问防火墙后面的群集上的HDFS中的数据(HttpFS服务器充当网关,并且是唯一允许将防火墙穿过群集进入群集的系统)。
HttpFS可用于使用HTTP实用程序(例如curl和wget)和来自Java以外的其他语言的HTTP库Perl来访问HDFS中的数据。
所述webhdfs客户文件系统实现可以用于使用Hadoop的文件系统命令(访问HttpFS hadoop的FS)行工具使用Hadoop的文件系统的Java API的Java应用程序,以及。
HttpFS具有内置的安全性,支持Hadoop伪身份验证和HTTP SPNEGO Kerberos以及其他可插入身份验证机制。它还提供了Hadoop代理用户支持。
详情可参考:https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html
服务器启动:
在hadoop3.1.2版本中已经将httpfs集成好了,我们只需要配置httpfs相关配置,启动后就能使用httpfs访问hdfs文件服务器
具体步骤:
配置HttpFS默认情况下,HttpFS假定Hadoop配置文件(core-site.xml和hdfs-site.xml)位于HttpFS配置目录中。
如果不是这种情况,则将httpfs.hadoop.config.dir属性添加到httpfs-site.xml文件,该属性设置为Hadoop配置目录的位置。
1.在core-site.xml中添加如下配置
<property> <name>hadoop.proxyuser.root.hosts</name> <value>s128</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>