使用HttpFS网关从防火墙后面访问HDFS
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.HttpFS概述
1>.什么是HttpFS
HttpFS是在Apache Tomcat上运行的Java应用程序,其允许通过WebHDFS REST API远程访问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中的数据。
温馨提示:
HttpFS具有内置的安全性,支持Hadoop伪身份验证和HTTP SPNEGO Kerberos以及其他可插入身份验证机制。它还提供了Hadoop代理用户支持。
2>.HttpFS的应用场景
可以设置HttpFS服务器以提供支持HDFS文件系统操作的REST HTTP网关。由于HttpFS是一个代理,它不需要客户端访问集群中的每一台机器,不像WebHDFS。
HttpFS在由防火墙的限制难以访问HDFS数据的环境中非常有用。在这种情况下,可以将HttpFS服务器设置为允许通过防火墙访问集群的唯一系统。
3>.注意事项
要使用HttFS,必须首先安装和配置HttpFS服务器,然后必须为HttpFS用户启用代理来访问HDFS,因此运行HttpFS服务器的用户可以代表其它用户访问HDFS。客户端只需要访问HttpFS,因为它是访问HDFS的HttpFS服务器。
Hue包含了一个HDFS浏览器,它在HA NameNode设置中使用HttpFS来访问HDFS文件系统。
在HDFS HA设置中,不能使用WebHDFS通过Hue的文件浏览器访问HDFS(如果你非要这样做也只能指定Active NameNode节点)。但在非HA设置中,可以使用WebHDFS或HttpFS访问HDFS。
WebHDFS和HttpFS之间的区别:
WebHDFS和HttpFS之间的一个关键区别是,使用HttpFS,单个节点将冲淡网关,并将数据的主传输管道发送到发出HttpFS命令的客户机节点。
另一方面,WebHDFS需要访问集群的所有节点,并且从该节点读取的数据直接从该节点发送。
综上所述,如果要传输非常打的文件,可以证明HttpFS是一个检查点。最好在环境中测试,选择最合适的工具。
二.配置HttpFS
1>.下载HttpFS二进制文件
如下图所示,我们下载的Apache Hadoop版本中自带有HttpFS功能,但需要单独启动守护进程,从目录结构中不难看出,HttpFS是在Tomcat上运行的Java程序。
关于Hadoop的部署我这里就不罗嗦了,相对来说比较简单,感兴趣的同学可自行查看我之前的笔记哟~
下载地址: https://hadoop.apache.org/releases.html 博主推荐阅读: https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html
2>.修改Hadoop的核心配置文件
[root@hadoop101.yinzhengjie.com ~]# vim ${HADOOP_HOME}/etc/hadoop/core-site.xml ...... <!-- 以下参数用于配置httpfs --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>hadoop101.yinzhengjie.com</value> <description>此处我指定本机的root是启动httpfs的用户名,主机名称我指定的本机名称</description> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> <description>此处我指定本机的root是启动httpfs的用户组名,组名我未指定,即代之本机的所有用户组</description> </property> ...... [root@hadoop101.yinzhengjie.com ~]# [root@hadoop101.yinzhengjie.com ~]# manage-hdfs.sh restart #如下图所示,当我们修改配置文件后,需要重启HDFS服务哟~(目的是激活配置的代理用户)
3>.启动HttpFS
[root@hadoop101.yinzhengjie.com ~]# jps 32013 Jps 30831 NameNode [root@hadoop101.yinzhengjie.com ~]# [root@hadoop101.yinzhengjie.com ~]# httpfs.sh start #启动HttpFS服务,如下图所示,启动成功后会多出来一个Boostrap进程,与此同时还会监听14000端口和14001端口哟~ [root@hadoop101.yinzhengjie.com ~]# [root@hadoop101.yinzhengjie.com ~]# jps 32054 Bootstrap 32072 Jps 30831 NameNode [root@hadoop101.yinzhengjie.com ~]#
三.使用HttpFS
1>.检查HDFS目录的状态
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 1 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie?op=liststatus&user.name=root" #检查"/yinzhengjie"目录的状态 {"FileStatuses":{"FileStatus":[{"pathSuffix":"hosts","type":"FILE","length":371,"owner":"root","group":"admingroup","permission":"644","accessTime":1598868446973,"modificationTime":15988684 47282,"blockSize":536870912,"replication":3}]}} [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl -s "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie?op=liststatus&user.name=root" | python -m json.tool #使用python工具将JSON可读性增强 { "FileStatuses": { "FileStatus": [ { "accessTime": 1598868446973, "blockSize": 536870912, "group": "admingroup", "length": 371, "modificationTime": 1598868447282, "owner": "root", "pathSuffix": "hosts", "permission": "644", "replication": 3, "type": "FILE" } ] } } [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]#
2>.创建目录
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 1 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?user.name=root&op=MKDIRS" | python -m json.tool { "boolean": true } [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 2 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts drwxr-xr-x - root admingroup 0 2020-09-01 07:16 /yinzhengjie/httpFS [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]#
3>.重命名目录
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 2 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts drwxr-xr-x - root admingroup 0 2020-09-01 07:23 /yinzhengjie/httpFS [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?op=RENAME&user.name=root&destination=/yinzhengjie/myHttpFS" | python -m json.tool { "boolean": true } [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 2 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts drwxr-xr-x - root admingroup 0 2020-09-01 07:23 /yinzhengjie/myHttpFS [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]#
4>.删除目录或文件
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 3 items -rw-r--r-- 3 root admingroup 490 2020-09-01 07:48 /yinzhengjie/fstab -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts drwxr-xr-x - root admingroup 0 2020-09-01 07:49 /yinzhengjie/myHttpFS [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/myHttpFS?op=DELETE&user.name=root" | python -m json.tool { "boolean": true } [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 2 items -rw-r--r-- 3 root admingroup 490 2020-09-01 07:48 /yinzhengjie/fstab -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts [root@hadoop105.yinzhengjie.com ~]#
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 2 items -rw-r--r-- 3 root admingroup 490 2020-09-01 07:48 /yinzhengjie/fstab -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/fstab?op=DELETE&user.name=root" | python -m json.tool { "boolean": true } [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/ Found 1 items -rw-r--r-- 3 root admingroup 371 2020-08-31 18:07 /yinzhengjie/hosts [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]#
5>.其它操作
经过上面的几个案例后,您是否发现其操作是那么的似曾相识呢?没错,这就是基于REST API风格。和我们之前操作的webHDFS的方式基本上雷同,事实上就是如此。 综上所述,我就不一一举例用法了,感兴趣的可以参考我下面给的链接。 博主推荐阅读: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html https://www.cnblogs.com/yinzhengjie2020/p/13352498.html