zoukankan      html  css  js  c++  java
  • 使用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
  • 相关阅读:
    九度-剑指Offer
    Fiddler如何模拟弱网环境进行测试
    登录功能测试点
    【转】移动应用崩溃日志收集工具对比
    【转】高扩展性网站的50条原则
    互联网常见架构接口压测性能分析及调优手段建议
    安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法
    JAVA+Maven+TestNG搭建接口测试框架及实例
    Jmeter(二)Jmeter目录介绍
    性能测试-Gatling(一)
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/13358022.html
Copyright © 2011-2022 走看看