最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然。

httpfs其实是使用http协议访问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中的数据。

所述webhdfs客户文件系统实现可以用于使用Hadoop的文件系统命令(访问HttpFS hadoop的FS)行工具使用Hadoop的文件系统的Java API的Java应用程序,以及。

HttpFS具有内置的安全性,支持Hadoop伪身份验证和HTTP SPNEGO Kerberos以及其他可插入身份验证机制。它还提供了Hadoop代理用户支持。

详情可参考:https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html

服务器启动:

在hadoop3.1.2版本中已经将httpfs集成好了,我们只需要配置httpfs相关配置,启动后就能使用httpfs访问hdfs文件服务器

具体步骤:

配置HttpFS

默认情况下,HttpFS假定Hadoop配置文件(core-site.xml和hdfs-site.xml)位于HttpFS配置目录中。

如果不是这种情况,则将httpfs.hadoop.config.dir属性添加到httpfs-site.xml文件,该属性设置为Hadoop配置目录的位置。

1.在core-site.xml中添加如下配置

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>s128</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

,其中红色标注的地方为代理用户身份运行HttpFS服务器的Unix用户,

hadoop.proxyuser.root.hosts我这里指定了具体的一台NameNode机器,如果指定其他hosts,可能会出现异常:
{"RemoteException":{"message":"Unauthorized connection for super-user: root from IP 192.168.3.128","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}

重新启动Hadoop

您需要重新启动Hadoop才能使proxyuser配置生效。

启动/停止HttpFS

要启动/停止HttpFS,请使用hdfs --daemon start | stop httpfs。例如:

hdfs --daemon start httpfs

测试HttpFS是否正常

http://s128:14000/webhdfs/v1?op=gethomedirectory&user.name=root

返回结果:

{"Path":"\/user\/root"}

表示HttpFS服务启动正常了

HTTPFS使用

http://${host}:14000/webhdfs/v1/${path}?op=${operator}&user.name=${user}

其中${host}为hadoop中启动的httpfs服务的host

${path}为要操作的路径,可以是目录也可以是文件

${operator}为操作类型,常见的如下:

HTTP GET
  OPEN (see FileSystem.open)
  GETFILESTATUS (see FileSystem.getFileStatus)
  LISTSTATUS (see FileSystem.listStatus)
  GETCONTENTSUMMARY (see FileSystem.getContentSummary)
  GETFILECHECKSUM (see FileSystem.getFileChecksum)
  GETHOMEDIRECTORY (see FileSystem.getHomeDirectory)
  GETDELEGATIONTOKEN (see FileSystem.getDelegationToken)
HTTP PUT
  CREATE (see FileSystem.create)
  MKDIRS (see FileSystem.mkdirs)
  RENAME (see FileSystem.rename)
  SETREPLICATION (see FileSystem.setReplication)
  SETOWNER (see FileSystem.setOwner)
  SETPERMISSION (see FileSystem.setPermission)
  SETTIMES (see FileSystem.setTimes)
  RENEWDELEGATIONTOKEN (see DistributedFileSystem.renewDelegationToken)
  CANCELDELEGATIONTOKEN (see DistributedFileSystem.cancelDelegationToken)
HTTP POST
  APPEND (see FileSystem.append)
HTTP DELETE
  DELETE (see FileSystem.delete)

${user}为httpfs启动用户名

列举某个文件夹下的文件:列举/wbd_test下的文件

http://s128:14000/webhdfs/v1/wbd_test?op=LISTSTATUS&user.name=root

返回结果:

{
    "FileStatuses":{
        "FileStatus":[
            {
                "pathSuffix":"snapshot_lzo_e302a790db684d05b084db87c6379008.txt",
                "type":"FILE",
                "length":2546994,
                "owner":"root",
                "group":"supergroup",
                "permission":"644",
                "accessTime":1571972356950,
                "modificationTime":1571972365701,
                "blockSize":134217728,
                "replication":2
            }
        ]
    }
}
												

hadoop-3.1.2启动httpfs的更多相关文章

  1. Hadoop的datanode无法启动

    Hadoop的datanode无法启动 hdfs-site中配置的dfs.data.dir为/usr/local/hadoop/hdfs/data 用bin/hadoop start-all.sh启动 ...

  2. Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid)

    Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid) java.io.IOException: All director ...

  3. 全网最详细的Hadoop HA集群启动后,两个namenode都是active的解决办法(图文详解)

    不多说,直接上干货! 这个问题,跟 全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解) 是大同小异. 欢迎大家,加入我的微信公众号:大数据躺过的坑  ...

  4. Hadoop集群初始化启动

    hadoop集群初始化启动 启动zookeeper ./zkServer.sh start 启动journalnode ./hadoop-daemon.sh start journalnode 格式化 ...

  5. Hadoop 2.0+YARN启动脚本分析与实战经验

    start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN. 在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成 ...

  6. Hadoop集群的启动顺序

    1.启动zookeeper集群 对于hadoop,使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息,对于HBase,使用Zookeeper的事件处理确保整个集群 ...

  7. hadoop中datanode无法启动

    一.问题描述 当我多次格式化文件系统时,如 [hadoop@xsh hadoop]$ ./bin/hdfs namenode -format 会出现datanode无法启动,查看日志(/usr/loc ...

  8. Hadoop namenode节点无法启动的问题解决

    namenode是Hadoop集群HDFS的管理节点,管理着整个分布式文件系统的命名空间,以及文件与块的映射关系等,在Hadoop集群中扮演着至关重要的作用. 我之前安装的Hadoop集群中namen ...

  9. Hadoop 历史服务配置启动查看

    历史服务配置启动查看 1)配置mapred-site.xml <property> <name>mapreduce.jobhistory.address</name> ...

随机推荐

  1. [C++] 类的使用(1)

    1.类的基本思想是数据抽象和封装.数据抽象是一种依赖于接口和实现分离的编程(以及设计)技术. 2.常量对象,以及常量对象的引用或指针都只能调用常量成员函数.因为非常量成员函数有可能修改其作用的对象,与 ...

  2. nginx如何配置负载均衡

    自己学习用 面试回答如下: 在nginx里面配置一个upstream,然后把相关的服务器ip都配置进去.然后采用轮询的方案,然后在nginx里面的配置项里,proxy-pass指向这个upstream ...

  3. Linux入门基础之 下

    八.Linux 管道.重定向及文本处理 8.1.Linux 多命令协作:管道及重定向 8.1.1 开源文化 开源文化的核心理念之一就是不要重复发明轮子,很多的开源软件都是现有软件.代码.功能的重新组合 ...

  4. 安装vue开发环境

    每次搜索vue开发环境安装时,总是有很多种版本,虽然都能安装完成,但还是整理下自己觉得比较好的版本吧 1.首先安装nodeJs以及也把git安装好(反正开发也是需要git),安装完成后执行 node ...

  5. 用Python帮你实现IP子网计算

    目录 0. 前言 1. ipaddress模块介绍 1.1 IP主机地址 1.2 定义网络 1.3 主机接口 1.4 检查address/network/interface对象 1.4.1 检查IP版 ...

  6. 如何在女友卸妆后,正确的找到她?---java中使用反射的小秘密

    故事背景 小白是个程序猿,刚毕业两年,最近交了一个女朋友,是同事介绍的.女朋友和闺蜜住在一起.小白早上很早接到女朋友电话,昨天她的一个文件错放到了他的电脑包,希望他帮忙送到她住的地方,她今天要向她bo ...

  7. springboot全局异常拦截源码解读

    在springboot中我们可以通过注解@ControllerAdvice来声明一个异常拦截类,通过@ExceptionHandler获取拦截类抛出来的具体异常类,我们可以通过阅读源码并debug去解 ...

  8. 从一道面试题深入了解java虚拟机内存结构

    记得刚大学毕业时,为了应付面试,疯狂的在网上刷JAVA的面试题,很多都靠死记硬背.其中有道面试题,给我的印象非常之深刻,有个大厂的面试官,顺着这道题目,一直往下问,问到java虚拟机的知识,最后把我给 ...

  9. Spring 梳理 - @Autowired VS @Resource

    Autowired @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property.当然,getter看个人需求,如果私 ...

  10. 【ADO.NET基础-Login】带验证码验证的登录界面(用于简单的基础学习)

    以下代码如果有不对或者不妥之处,还望大神们指点一二 或者有同学者有问题或建议,一定要提出来,共同探讨 小弟在此感谢! 前台代码: <!DOCTYPE html> <html xmln ...