HTTP方式在线访问Hadoop HDFS上的文件解决方案

 背景:

在做大数据和大模型产品的时候,方式设计的是将文件放在hdfs上进行管理,前几天遇到一个需求:需要通过http的方式去访问hdfs上的问题,以前基本上都是通过hdfs://hadoop01:9000,去访问文件,于是经过一番调研对这个进行一下总结,为后续做个记录。

为了通过HTTP方式在线访问HDFS上的文件,您可以利用WebHDFS REST API或者HttpFS Gateway这两种机制实现。以下是使用这两种方式访问HDFS文件的基本步骤。

注:本例使用的是Hadoop2.7.X版本,请各位同学留意!

一、使用WebHDFS REST API

1.HTTPFS简介

1:httpfs是cloudera公司提供的一个hadoop hdfs的一个http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问

2:与WebHDFS的区别是不需要客户端可以访问hadoop集群的每一个节点,通过httpfs可以访问放置在防火墙后面的hadoop集群

3:httpfs是一个Web应用,部署在内嵌的tomcat中

 2.webHDFS设置

做这个的前提是Hadoop已经安装ok,没有任何问题了,如果安装Hadoop步骤或问题,可参考博主的这篇文章:超详细的Hadoop集群部署_hadoop部署-CSDN博客

 namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的。

在namenode和一台datanode中向 etc/hadoop/conf/hdfs-site.xml中添加属性:

vi hdfs-site.xml

<property><name>dfs.webhdfs.enabled</name><value>true</value>
</property>

3.使用说明

Hadoop 2.x版本可能会监听在50070端口提供Web界面

访问namenode的hdfs使用50070端口,访问datanode的webhdfs使用50075端口。访问文件、文件夹信息使用namenode的IP和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的IP和50075端口。要想不区分端口,直接使用namenode的IP和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hdfs-site.xml中的dfs.webhdfs.enabled为true。

4.curl 操作命令示例

(需要将 host 替换为实际部署 httpfs 的服务器 IP)

curl -c ~/.httpsauth "http://host:50070/webhdfs/v1?op=gethomedirectory&user.name=hdfs"curl -b ~/.httpsauth "http://host:50070/webhdfs/v1?op=gethomedirectory"curl -b ~/.httpsauth "http://host:50070/webhdfs/v1/test/data1.txt?op=OPEN"curl -b ~/.httpsauth -X DELETE "http://host:14000/webhdfs/v1/test/data1.txt?op=DELETE"
创建和追加都是分为两步,测试都没有成功 (注意,一定要追加 --header 参数,否则创建会失败)
curl -b ~/.httpsauth -i -X PUT "http://172.168.63.221:14000/webhdfs/v1/test2?op=CREATE&buffersize=1000"curl -b ~/.httpsauth -i -X PUT -T data2.txt --header "Content-Type: application/octet-stream" "http://172.168.63.221:14000/webhdfs/v1/test2/data.txt?op=CREATE&user.name=hdfs&buffersize=1000&data=true"

其他API:

创建并写一个文件curl -i -X PUT "http://localhost:50070/webhdfs/v1/<PATH>?op=CREATE[&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>][&permission=<OCTAL>][&buffersize=<INT>]“curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE...“注意这个地方填入的是DataNode的信息在一个文件内追加内容curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=APPEND[&buffersize=<INT>]”curl -i -X POST -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND...“注意该条命令获得的是DataNode的信息。打开并读取一个文件curl -i -L "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN[&offset=<LONG>][&length=<LONG>][&buffersize=<INT>]“创建一个目录curl -i -X PUT "http://<HOST>:<PORT>/<PATH>?op=MKDIRS[&permission=<OCTAL>]“重名命文件、文件夹curl -i -X PUT "<HOST>:<PORT>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>"删除文件/文件夹curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE [&recursive=<true|false>]“文件/ 文件夹的状态信息curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS“目录列表curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS”获取目录的上下文环境汇总信息curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETCONTENTSUMMARY"获取Check Sum Filecurl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM”获取Home 目录curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETHOMEDIRECTORY”设置权限curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETPERMISSION [&permission=<OCTAL>]“设置所有者curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETOWNER [&owner=<USER>][&group=<GROUP>]"设置备份curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION [&replication=<SHORT>]“

我使用的是查看所以用的是这个命令:

http://hadoop01:50070/webhdfs/v1/<PATH>?op=OPEN

http(s)://<NAMENODE_HTTP_ADDRESS>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=OPEN[&offset=<LONG>&length=<LONG>]

其中:

  • <NAMENODE_HTTP_ADDRESS> 是NameNode的HTTP地址。
  • <HTTP_PORT> 是WebHDFS服务监听的HTTP端口。
  • <PATH> 是HDFS文件系统的路径。
  • offset 和 length 是可选参数,用于指定读取文件的起始位置和长度。

5.身份验证

如果Hadoop集群启用了安全性(如Kerberos),则需要在HTTP请求中包含有效的认证凭证(如SPNEGO令牌)。

6.基于 JAVA 操作 httpfs 的开源代码

开源项目地址,有什么问题可以直接反馈给我

    https://github.com/gitriver/httpfs-client

   说明

   1  包 com.catt.httpfs.client.httpclient 是采用 commons-httpclient.jar,
    基于 http 请求实现的,没有使用到 hadoop 相关的 jar
    2  包 org.apache.hadoop.fs.http.client 根据 httpfs 项目的源代码,
    根据需要修改了一下,使用了 hadoop 相关的 jar

二、使用HttpFS Gateway

1.安装和配置HttpFS Gateway

HttpFS是一个独立的服务,需安装并在Apache Tomcat或其他Servlet容器上运行。配置HttpFS以连接到您的Hadoop集群,并启动服务。

2.访问文件

使用类似于WebHDFS的API调用,但通过HttpFS Gateway提供的URL访问文件。例如:

http(s)://<HTTPFS_SERVER>:<HTTPFS_PORT>/<PATH>?op=OPEN[&offset=<LONG>&length=<LONG>]

这里 <HTTPFS_SERVER> 和 <HTTPFS_PORT> 是HttpFS服务所在的服务器地址和端口。

无论是WebHDFS还是HttpFS,由于涉及到安全性和权限控制,可能还需要进行Kerberos认证或简单的HTTP基本认证。根据实际情况配置相应的身份验证机制。

请注意,在生产环境中,还需考虑网络策略和防火墙设置,以确保外部客户端能够通过HTTP访问这些服务。同时,对于大规模文件或频繁访问的情况,通常建议结合使用代理服务器(如Nginx)进行负载均衡和缓存优化。

引申:

1. HTTPFS: 基于HTTP操作hadoop hdfs文件系统

HTTPFS: 基于HTTP操作hadoop hdfs文件系统 - 大数据处理技术研究、使用 - OSCHINA - 中文开源技术交流社区

2. 利用JavaAPI访问HDFS的文件
    利用JavaAPI访问HDFS的文件_java api 访问hdfs 读取文件-CSDN博客 

3. Hadoop HDFS over HTTP - Documentation Sets 2.2.0
   http://hadoop.apache.org/docs/r2.2.0/hadoop-hdfs-httpfs/index.html 

4. 

Hadoop HDFS over HTTP 2.2.0 - Using HTTP Tools

http://hadoop.apache.org/docs/r2.2.0/hadoop-hdfs-httpfs/UsingHttpTools.html

5. Hadoop REST API -WebHDFS(上)
    http://www.tuicool.com/articles/yUZnMj 

6. httpfs装配指南
   http://www.ylzx8.cn/gaoxingnenkaifa/cloud/1010950.html 

https://my.oschina.net/cloudcoder/blog/277426

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册表获取autoCAD安装位置

注意事项 注意&#xff1a;①64位操作系统注册表会重定向&#xff0c;RegOpenKeyEx第4个参数得加上KEY_WOW64_64KEY&#xff1b;②RegOpenKeyEx遍历子项时注意第2和第4参数&#xff0c;参考图&#xff1a; ③RegQueryValueEx同样得注意第6参数 完整代码 std::unordered_map…

基于ssm+vue+Mysql的药源购物网站

开发语言&#xff1a;Java框架&#xff1a;ssmJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.…

【Redis基础】Redis知识体系详解-Redis概念和基础

1. 什么是Redis Redis是一款用C语言编写的key-value存储系统&#xff08;键值存储系统&#xff09;&#xff0c;支持丰富的数据类型&#xff0c;如&#xff1a;String、list、set、zset、hash。 Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存&#xff0c;事…

SpringBoot / SpringCloud 注册与发现

SpringBoot / SpringCloud EnableDiscoveryClient与EnableEurekaClient区别 在使用Spring Cloud feign使用中在使用服务发现的时候提到了两种注解&#xff0c;一种为EnableDiscoveryClient,一种为EnableEurekaClient,用法上基本一致。 spring cloud中discovery service有许多…

C#(C Sharp)学习笔记_方法(Medthod)【十六】

什么是方法&#xff1f; 在编程中&#xff0c;方法&#xff08;Method&#xff09;是一个执行特定操作的代码块。它是一种将逻辑封装起来的方式&#xff0c;使得代码更加模块化、重用性更高&#xff0c;并且易于维护。以下是方法的一些关键特性&#xff1a; 封装性&#xff1a…

【WEEK10】学习目标及总结【Spring Boot】【中文版】

学习目标&#xff1a; 学习SpringBoot 学习内容&#xff1a; 参考视频教程【狂神说Java】SpringBoot最新教程IDEA版通俗易懂MVC自动配置原理员工管理系统 准备工作首页实现 学习时间及产出&#xff1a; 第十周MON~TUE 2024.4.29【WEEK10】 【DAY1】MVC自动配置原理【中文版…

使用Spring Boot、Redis和Spring Cache实现高效缓存

在当今互联网应用开发中&#xff0c;性能是至关重要的因素之一。随着用户量的增加和数据量的膨胀&#xff0c;有效地管理数据的访问和处理变得愈发重要。 在这个背景下&#xff0c;缓存成为了提升应用性能的常用手段之一。本文将介绍如何利用Spring Boot、Redis以及Spring Cac…

Unity编辑器扩展

Unity编辑器扩展 引言 在游戏开发领域&#xff0c;Unity因其强大的功能和灵活性而备受欢迎。Unity的编辑器扩展能力尤其突出&#xff0c;它允许开发者自定义编辑器界面和功能来满足特定的开发需求。通过编辑器扩展&#xff0c;我们可以优化工作流程&#xff0c;提高生产力&am…

Cokejogo巴西 电子游戏源码 游戏网站源码 电子游戏合集 电子游戏软件下载 游戏源码(带安装教程)

Cokejogo巴西pg电子游戏源码/H5PC端 前端vue编译后后端PHP/修复图片资源失效 后端测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态thinkPHP&#xff0c;开启ssl证书 源码下载&#xff1a;https://download.csdn.n…

CUDA内存模型

核函数性能并不只与线程束的执行有关。 CUDA内存模型概述 GPU和CPU内存模型的主要区别是&#xff0c;CUDA编程模型能将内存层次结构更好地呈现给用户&#xff0c;能让我们显示的控制它的行为。 对程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#x…

JSP和tomcat

JSP&#xff08;JavaServer Pages&#xff09;是一种用于开发动态Web内容的技术&#xff0c;它允许开发者将Java代码嵌入到HTML页面中。JSP页面在服务器端被解析并转换成Servlet&#xff0c;然后由Servlet容器&#xff08;比如Tomcat&#xff09;执行。JSP允许开发者在页面中使…

YOLO系列改进,自研模块助力涨点

目录 一、原理 二、代码 三、添加到YOLOv5中 一、原理 论文地址:

截取视频第一帧当做封面

看了好多处理视频的框架 比如ffmpeg&#xff0c;很多都需要依赖安装第三方插件&#xff0c;比较麻烦&#xff0c;找到一个内嵌进去不需要额外安装的&#xff1a;jcodec 一 首先代码中添加依赖 <!--视频生成预览图用--><dependency><groupId>org.jcodec</…

企业职能部门定岗定编项目如何做?

某国家级高新技术开发区成立于上世纪90年代&#xff0c;位于南方某市&#xff0c;地处三省交界处&#xff0c;是直接由该省委省政府创办的全省首批高新技术开发区。该开发区面积达到300平方公里&#xff0c;辖区人口30万人。历经数十年发展&#xff0c;在省委省政府的高度重视下…

QT:核心控件-QWidget

文章目录 控件enableobjectNamegeometrysetWindowTitleopacitycursorFonttooltipstyleSheet 控件 什么是控件&#xff1f; 如上所示&#xff0c;就是控件&#xff0c;而本篇要做的就是对于这些控件挑选一些比较有用的常用的进行讲解分析 在QT的右侧&#xff0c;会有对应的空间…

unity制作app(1)--登录 注册 界面

把学到的知识投入到生产中反而是一件简单的事情&#xff01; 1.调整canvas的形状&#xff0c;这里和camera没有任何关系! overlay&#xff01; 2.既然自适应&#xff0c;空间按钮的位置比例就很重要了&#xff01; game窗口中新增720*1280的分辨率&#xff01; 3.再回到can…

【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias 论文地址摘要&#xff1a;简介&#xff1a;3 方法论3.1 重温视觉变压器3.2 ViTAE3.3 缩减单元3.4 Normal cell3.5 模型细节 4 训练4.1 Implementation details4.2 Comparison with the state-of-the-…

高速收发器(GTX)文章导航

关于FPGA的开发&#xff0c;大致可以分为算法和接口两类&#xff0c;其中接口又可以分为高速和低速两类&#xff0c;像UART、I2C、SPI、SDRAM、HDMI、LVDS等等&#xff0c;都被归为低速接口类别&#xff0c;最高线速率不过几百Mbps&#xff0c;使用FPGA的普通IO即可实现数据收发…

LeetCode刷题笔记第145题:二叉树的后序遍历

LeetCode刷题笔记第145题&#xff1a;二叉树的后序遍历 题目&#xff1a; 给定一棵二叉树的根节点 root &#xff0c;返回其节点值的后序遍历 。 想法&#xff1a; 后序遍历的是通过对树经过“左右根”的顺序进行遍历。使用递归的方式&#xff0c;先遍历左子树&#xff0c;…

Elasticsearch:理解近似最近邻 (ANN) 算法

作者&#xff1a;来自 Elastic Elastic Platform Team 如果你是在互联网出现之前长大的&#xff0c;你会记得找到新喜好并不总是那么容易。我们是在无意中听到收音机里的新乐队时发现他们的&#xff0c;是因为忘了换频道偶然看到一个新电视节目的&#xff0c;也是几乎完全依据游…