目录
- Hadoop系列文章目录
- 一、HttpFS介绍
- 1、HttpFS概述
- 二、HttpFS配置
- 1、概述
- 2、java api 访问示例
- 3、本环境配置示例
- 1)、修改配置文件
- 2)、同步配置文件并重启
- 3)、启动HttpFS
- 三、HttpFS配置验证
- 1、验证
- 2、使用示例
- 四、HttpFS与WebHDFS的比较
- 1、WebHDFS
- 2、HttpFS
本文介绍HttpFS的使用。
可以与前一篇文章一起阅读。HDFS API的RESTful风格–WebHDFS 本文分为四部分,即介绍、配置、验证与和WebHDFS的比较。
本文阅读前提是已经部署好hadoop环境,具体部署参考hadoop3.1.4简单介绍及部署、简单验证
一、HttpFS介绍
1、HttpFS概述
- HttpFS 是一个提供RESTful 接口的网关的服务器,该网关支持所有HDFS文件系统操作
- 对于文件CURD的操作全部提交给HttpFS服务进行中转,然后由HttpFS去跟HDFS集群交互
- HttpFS是一个独立于HDFS的服务,若使用需要手动安装。本质上是一个代理服务
- HttpFS本身是Java Web应用程序。使用内置的Jetty服务器对外提供服务
- HttpFS默认端口号为14000
二、HttpFS配置
1、概述
配置允许通过代理访问的主机节点、用户所属组。core-site.xml配置文件。
服务端需要在NameNode和ResourceManager的core-site.xml中进行代理权限相关配置。 对于每一个superUser用户,配置参数:
对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。
这几个配置项的值都可以使用*来表示允许所有的主机/用户组/用户
<property>
<name>hadoop.proxyuser.userA.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.userA.users</name>
<value>user1,user2</value>
</property>
<!-- 表示允许用户userA,在任意主机节点,代理用户user1和user2 -->
2、java api 访问示例
// 创建superUser用户
UserGroupInformation superUser = UserGroupInformation.getCurrentUser();
//创建proxyUser用户
UserGroupInformation proxyUgi = UserGroupInformation.createProxyUser(“proxyUser”, superUser);
// 使用proxyUser用户访问集群
proxyUgi.doAs(new PrivilegedExceptionAction<Void>() {
@Override
public Void run() throws Exception {
// 使用proxy用户访问hdfs
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(new Path(“/proxyUserDir”));
// 使用proxy用户提交mr作业
JobClient jc = new JobClient(conf);
jc.submitJob(conf);
return null;
}
});
3、本环境配置示例
alanchan用户是本hadoop集群的部署用户。
1)、修改配置文件
<property>
<name>hadoop.proxyuser.alanchan.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.alanchan.groups</name>
<value>*</value>
</property>
<!--
表示alanchan用户可以在任意host主机节点上代表任意group组的用户。
*表示所有。
-->
2)、同步配置文件并重启
同步配置文件到集群中其他节点,并重启HDFS集群
cd /usr/local/bigdata/hadoop-3.1.4/etc/hadoop
scp core-site.xml server2:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop/
scp core-site.xml server3:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop/
scp core-site.xml server4:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop/
cd /usr/local/bigdata/hadoop-3.1.4/sbin
start-all.sh
stop-all.sh
3)、启动HttpFS
# 启动
hdfs --daemon start httpfs
# 关闭
hdfs --daemon stop httpfs
[alanchan@server1 sbin]$ hdfs --daemon start httpfs
WARNING: /usr/local/bigdata/hadoop-3.1.4/temp does not exist. Creating.
# 验证进程
[alanchan@server1 sbin]$ jps
28276 NameNode
30712 Jps
28872 ResourceManager
30460 HttpFSServerWebServer
# HttpFSServerWebServer该进程为HttpFS进程
三、HttpFS配置验证1、验证
通过查看进程是否启动以及通过页面是否可以访问、使用来验证配置正确与否。
[alanchan@server1 sbin]$ jps
30460 HttpFSServerWebServer
访问HttpFS服务
http://server1:14000/static/index.html
HttpFS访问指定用户身份
http://server1:14000/webhdfs/v1?op=LISTSTATUS
http://server1:14000/webhdfs/v1?user.name=alanchan&op=LISTSTATUS
user.name=alanchan,是core-site.xml中配置的用户
通过以上的命令行验证以及页面验证,可发现如预期,则表明配置正确。
2、使用示例
查看文件及其文件夹,本示例是查看根目录下,对应的命令:hadoop fs -ls /test
http://server1:14000/webhdfs/v1/test?user.name=alanchan&op=LISTSTATUS test是路径,其目录下有2个文件
1、WebHDFS
- HDFS内置、默认开启
- 基于REST的HDFS API
- 重定向到资源所在的datanode
- 客户端会和nn、dn交互
- 使用内置的WebHDFS REST API操作访问
http://server1:9870/webhdfs/v1/?op=LISTSTATUS 端口由dfs.namenode.http-address指定。默认值9870
2、HttpFS
- 独立服务,手动开启
- 基于REST的HDFS API
- 数据先传输到该httpfs server,再由其传输到client
- 客户端不跟hdfs直接交互
- 使用HttpFS web Server 服务操作访问
http://server1:14000/webhdfs/v1?user.name=alanchan&op=LISTSTATUS 端口:14000
外部系统使用一般推荐HttpFS,不过取决于实际的应用环境情况。