使用HttpFS网关从防火墙后面访问HDFS

          使用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 ~]# 
[root@hadoop101.yinzhengjie.com ~]# httpfs.sh start        #启动HttpFS服务,如下图所示,启动成功后会多出来一个Boostrap进程,与此同时还会监听14000端口和14001端口哟~

 

三.使用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 ~]# 
[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可读性增强

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 ~]# 
[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

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 ~]# 
[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

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 ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/myHttpFS?op=DELETE&user.name=root" | python -m json.tool  #删除目录
[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 ~]# 
[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    #删除文件

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

 

posted @ 2020-07-21 23:10  JasonYin2020  阅读(645)  评论(0编辑  收藏  举报