• 使用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
  • 相关阅读:
    Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法
    ubuntu 关闭显示器的命令
    ubuntu android studio kvm
    ubuntu 14.04版本更改文件夹背景色为草绿色
    ubuntu 创建桌面快捷方式
    Ubuntu 如何更改用户密码
    ubuntu 14.04 返回到经典桌面方法
    ubuntu 信使(iptux) 创建桌面快捷方式
    Eclipse failed to get the required ADT version number from the sdk
    Eclipse '<>' operator is not allowed for source level below 1.7
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/13358022.html
Copyright © 2020-2023  润新知