Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS

✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS

作者头像
Maynor
发布于 2021-12-06 11:41:18
发布于 2021-12-06 11:41:18
2.8K00
代码可运行
举报
运行总次数:0
代码可运行
文章目录

前言

目前博客Hadoop文章大都停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路!

历史文章

[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS

[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS

[hadoop3.x系列]Hadoop常用文件存储格式及BigData File Viewer工具的使用(三)

✨[hadoop3.x]新一代的存储格式Apache Arrow(四)

[hadoop3.x]HDFS存储类型和存储策略(五)概述

需求:

如果我们想要在没有安装HDFS客户端的机器上操作该如何呢?譬如以下场景:

接下来,我们将学习几种基于HTTP协议的客户端,HTTP是跨平台的,它不要求客户端上必须安装Hadoop,就可以直接操作HDFS。

WebHDFS概述及操作

简介

WebHDFS其实是HDFS提供的HTTP RESTFul API接口,并且它是独立于Hadoop的版本的,它支持HDFS的完整FileSystem / FileContext接口。它可以让客户端发送http请求的方式来操作HDFS,而无需安装Hadoop。

在我们经常使用的HDFS Web UI,它就是基于webhdfs来操作HDFS的。

关于RESTful

REST

REST(表现层状态转换,英语:Representational State Transfer)是Roy Thomas Fielding博士于2000年在博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。 REST是基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。 因此REST提供了在互联网络的计算系统之间,彼此资源可交互使用的协作性质(interoperability)。相对于其它种类的网络服务,例如SOAP服务,则是以本身所定义的操作集,来访问网络上的资源。 目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的Web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务运行图书查询;雅虎提供的Web服务也是REST风格的。 需要注意的是,REST是设计风格而不是标准。REST通常基于HTTP、URI、XML以及HTML这些现有的广泛流行的协议和标准。 资源是由URI来指定。 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。 通过操作资源的表现形式来操作资源。 资源的表现形式则是XML或者HTML,取决于读者是机器还是人、是消费Web服务的客户软件还是Web浏览器。当然也可以是任何其他的格式,例如JSON

RESTFul API

符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义: 直观简短的资源地址:URI,比如:http://example.com/resources 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。 资源 GET PUT POST DELETE 一组资源的URI,比如 https://example.com/resources 列出URI,以及该资源组中每个资源的详细信息。 使用给定的一组资源替换当前整组资源。 在本组资源中创建/追加一个新的资源。该操作往往返回新资源的URL。 删除整组资源。 单个资源的URI,比如https://example.com/resources/142 获取指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) 替换/创建指定的资源。并将其追加到相应的资源组中。 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 删除指定的元素。 PUT和DELETE方法是幂等方法 GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)

PUT请求类型和POST请求类型的区别

PUT和POST均可用于创建或者更新某个资源(例如:添加一个用户、添加一个文件),用哪种请求方式取决我们自己。 我们主要使用是否需要有幂等性来判断到底用PUT、还是POST。PUT是幂等的,也就是将一个对象进行两次PUT操作,是不会起作用的。而如果使用POST,会同时收到两个请求。

HDFS HTTP RESTFUL API

HDFS HTTP RESTFUL API它支持以下操作:

HTTP GET

OPEN (等同于FileSystem.open) GETFILESTATUS (等同于FileSystem.getFileStatus) LISTSTATUS (等同于FileSystem.listStatus) LISTSTATUS_BATCH (等同于FileSystem.listStatusIterator) GETCONTENTSUMMARY (等同于FileSystem.getContentSummary) GETQUOTAUSAGE (等同于FileSystem.getQuotaUsage) GETFILECHECKSUM (等同于FileSystem.getFileChecksum) GETHOMEDIRECTORY (等同于FileSystem.getHomeDirectory) GETDELEGATIONTOKEN (等同于FileSystem.getDelegationToken) GETTRASHROOT (等同于FileSystem.getTrashRoot) GETXATTRS (等同于FileSystem.getXAttr) GETXATTRS (等同于FileSystem.getXAttrs) GETXATTRS (等同于FileSystem.getXAttrs) LISTXATTRS (等同于FileSystem.listXAttrs) CHECKACCESS (等同于FileSystem.access) GETALLSTORAGEPOLICY (等同于FileSystem.getAllStoragePolicies) GETSTORAGEPOLICY (等同于FileSystem.getStoragePolicy) GETSNAPSHOTDIFF GETSNAPSHOTTABLEDIRECTORYLIST GETECPOLICY (等同于HDFSErasureCoding.getErasureCodingPolicy) GETFILEBLOCKLOCATIONS (等同于FileSystem.getFileBlockLocations)

HTTP PUT

CREATE (等同于FileSystem.create) MKDIRS (等同于FileSystem.mkdirs) CREATESYMLINK (等同于FileContext.createSymlink) RENAME (等同于FileSystem.rename) SETREPLICATION (等同于FileSystem.setReplication) SETOWNER (等同于FileSystem.setOwner) SETPERMISSION (等同于FileSystem.setPermission) SETTIMES (等同于FileSystem.setTimes) RENEWDELEGATIONTOKEN (等同于DelegationTokenAuthenticator.renewDelegationToken) CANCELDELEGATIONTOKEN (等同于DelegationTokenAuthenticator.cancelDelegationToken) CREATESNAPSHOT (等同于FileSystem.createSnapshot) RENAMESNAPSHOT (等同于FileSystem.renameSnapshot) SETXATTR (等同于FileSystem.setXAttr) REMOVEXATTR (等同于FileSystem.removeXAttr) SETSTORAGEPOLICY (等同于FileSystem.setStoragePolicy) ENABLEECPOLICY (等同于HDFSErasureCoding.enablePolicy) DISABLEECPOLICY (等同于HDFSErasureCoding.disablePolicy) SETECPOLICY (等同于HDFSErasureCoding.setErasureCodingPolicy)

HTTP POST

APPEND (等同于FileSystem.append) CONCAT (等同于FileSystem.concat) TRUNCATE (等同于FileSystem.truncate) UNSETSTORAGEPOLICY (等同于FileSystem.unsetStoragePolicy) UNSETECPOLICY (等同于HDFSErasureCoding.unsetErasureCodingPolicy) 1.1.3.4 HTTP DELETE DELETE (等同于FileSystem.delete) DELETESNAPSHOT (等同于FileSystem.deleteSnapshot)

文件系统URL和HTTP URL

WebHDFS的文件系统schema是webhdfs://。WebHDFS文件系统URI具有以下格式。

webhdfs://:/

上面的WebHDFS URI对应于下面的HDFS URI。

hdfs://:/

在RESTAPI中,在路径中插入前缀“/webhdfs/v1”,并在末尾追加一个查询。因此,对应的HTTPURL具有以下格式。

http://:/webhdfs/v1/ ?op=…

安装Postman进行测试: 请求URL:http://node1.itcast.cn:9870/webhdfs/v1/?op=LISTSTATUS 该操作表示要查看根目录下的所有文件以及目录,相当于 hdfs dfs -ls /

我们可以在Postman中看到,HDFS给我们返回了以下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "FileStatuses": {
        "FileStatus": [
            {
                "accessTime": 0,
                "blockSize": 0,
                "childrenNum": 2,
                "fileId": 16698,
                "group": "supergroup",
                "length": 0,
                "modificationTime": 1601513468046,
                "owner": "root",
                "pathSuffix": "data",
                "permission": "755",
                "replication": 0,
                "storagePolicy": 0,
                "type": "DIRECTORY"
            },
            {
                "accessTime": 0,
                "blockSize": 0,
                "childrenNum": 2,
                "fileId": 16386,
                "group": "supergroup",
                "length": 0,
                "modificationTime": 1600886915849,
                "owner": "root",
                "pathSuffix": "mr-history",
                "permission": "770",
                "replication": 0,
                "storagePolicy": 0,
                "type": "DIRECTORY"
            },
            ...
        ]
    }
}

使用WebHDFS创建并写入到一个文件

创建文件

提交HTTP PUT请求,而不会自动跟随重定向,也不会发送文件数据。

curl -i -X PUT “http://:/webhdfs/v1/ ?op=CREATE [&overwrite=][&blocksize=][&replication=] [&permission=][&buffersize=][&noredirect=]”

通常,请求被重定向到要写入文件数据的DataNode。

HTTP/1.1 307 TEMPORARY_REDIRECT Location: http://:/webhdfs/v1/ ?op=CREATE… Content-Length: 0

如果不希望自动重定向,则可以设置noredirected标志。

HTTP/1.1 200 OK Content-Type: application/json {“Location”:“http://:/webhdfs/v1/ ?op=CREATE…”}

示例: 在/data/hdfs-test目录中创建一个名字为webhdfs_api.txt文件,并写入内容。 使用postman创建一个请求,设置请求方式为PUT,请求url为:

http://node1.itcast.cn:9870/webhdfs/v1/data/hdfs-test/webhdfs_api.txt?op=CREATE&overwrite=true&replication=2&noredirect=true

HTTP会响应一个用于上传数据的URL链接:

{ “Location”: “http://node1.itcast.cn:9864/webhdfs/v1/data/hdfs-test/webhdfs_api.txt?op=CREATE&namenoderpcaddress=node1.itcast.cn:9820&createflag=&createparent=true&overwrite=true&replication=2” }

写入数据

使用Location标头中的URL提交另一个HTTP PUT请求(如果指定了noredirect,则返回返回的响应),并写入要写入的文件数据。 curl -i -X PUT -T “http://:/webhdfs/v1/ ?op=CREATE…” 客户端接收到一个201创建的响应,该响应的内容长度为零,位置头中文件的WebHDFS URI为: HTTP/1.1 201 Created Location: webhdfs://:/ Content-Length: 0

示例: 使用postman基于之前返回的http响应,上传文件。

我们打开WebUI,发现文件已经上传成功。

更多操作请参考: https://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Crohttps://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Cro ss-Site_Request_Forgery_Prevention

后记

博客主页:https://manor.blog.csdn.net 本文由 manor 原创,首发于 CSDN博客 Hadoop系列文章会每天更新!✨

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HDFS的javaAPI操作(10)
在之前的博客《HDFS的shell常用命令大全》中,小菌为大家分享的是在linux系统的命令行上通过shell命令操作HDFS。而本篇博客,小菌为大家带来的则是在java的环境下,用JavaAPI操作HDFS!学过Java的小伙伴们是不是感觉很nice(`・ω・´)~
大数据梦想家
2021/01/22
5160
HDFS的javaAPI操作(10)
Hadoop webHDFS设置和使用说明
namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的。
星哥玩云
2022/07/01
2.5K0
HDFS系列(6) | HDFS的java API操作
在之前的博客《HDFS系列(5) |进行API操作前的准备》中,博主为大家分享的是在进行API操作前的准备工作。而本篇博客,博主为大家展现HDFS的API操作。 1. HDFS文件上传 1. 源码: package com.buwenbuhuo.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; imp
不温卜火
2020/10/28
8960
HDFS系列(6) | HDFS的java API操作
[hadoop3.x]HDFS存储类型和存储策略(五)概述
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/12/06
1.5K0
[hadoop3.x]HDFS存储类型和存储策略(五)概述
Hadoop开启WebHDFS服务及测试
WebHDFS观念是基于HTTP操作,比如GET、PUT、POST和DELETE。像OPEN、GETFILESTATUS、LISTSTATUS的操作是使用HTTP GET,其它的像CREAT、MKDIRS、RENAME、SETPERMISSION是依赖于HTTP PUT类型。 APPEND操作时基于HTTP POST类型,然而,DELETE是使用HTTP DELETE。
星哥玩云
2022/07/03
8680
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/12/06
1.2K0
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
Hadoop——hdfs常用操作和api编程
点击下载 链接:https://pan.baidu.com/s/1s2SdzrD11kB7AePxWcCxYQ 提取码:lw20
不愿意做鱼的小鲸鱼
2022/09/24
2440
Hadoop——hdfs常用操作和api编程
Apache Zeppelin 中 HDFS文件系统 解释器
概述 Hadoop文件系统是hadoop项目的分布式,容错文件系统的一部分,通常用作Hadoop MapReduce和Apache Spark或Alluxio等底层文件系统等分布式处理引擎的存储
片刻
2018/01/05
1K0
Hadoop的hdfs api操作 原
public static void listFile(String path) throws IOException{ //读取配置文件 Configuration conf = new Configuration(); //获取文件系统 FileSystem fs = FileSystem.get(URI.create("hdfs://hadoop1:9000"),conf); //获取文件或目录状态 FileStatus[] fileStatus = fs.listStatu
用户2603479
2018/08/15
2610
如何在集群外节点跨网段向HDFS写数据
Fayson想了想这个问题其实在各个环境是都可能碰到的,于是在这篇文章给大家系统介绍一下。
Fayson
2018/03/29
2.8K0
如何在集群外节点跨网段向HDFS写数据
Hadoop3.x 学习笔记
一开始我使用的是在Mac系统下 Docker 中建立了三个环境来搭建的,但是由于HDFS操作的时候是客户端直接联系DataNode来进行数据操作的原理,Mac下不能直接访问到Docker中的容器服务,也不能通过桥接连接,所以我后来改为在VirtualBox中安装了三个Linux虚拟机,才配置通了。
前Thoughtworks-杨焱
2021/12/07
2550
[hadoop3.x]HDFS存储策略和冷热温三阶段数据存储(六)概述
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/10/09
8420
2021年大数据Hadoop(十二):HDFS的API操作
HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。
Lansonli
2021/10/11
1.2K0
Hadoop--HDFS API编程封装
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。   对分HDFS中的文件操作主要涉及一下几个类:   Configuration类:该类的对象封转了客户端或者服务器的配置。   FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态
汤高
2018/01/11
1.1K0
Hadoop数据分析平台实战——020Hadoop Shell命令(初学跳过)离线数据分析平台实战——020Hadoop Shell命令(可跳过)
离线数据分析平台实战——020Hadoop Shell命令(可跳过) Hadoop Shell命令简单描述 Hadoop的Shell命令主要分为两类: 一类是启动命令 一类是控制/操作命令(hdfs+mapred+yarn) 其中启动命令位于sbin目录下面, 控制/操作命令主要位于bin目录下面 其实最终的启动命令也是调用控制命令来进行集群服务的启动,区别在于启动命令中需要使用ssh的相关命令来控制其他机器启动服务, 而控制/操作命令主要是直接调用hadoop提供的服务类接口。 Hadoop配置信
Albert陈凯
2018/04/08
1.2K0
Hadoop数据分析平台实战——020Hadoop Shell命令(初学跳过)离线数据分析平台实战——020Hadoop Shell命令(可跳过)
一种分析HDFS文件变化及小文件分布情况的方法
目前各个企业都在利用Hadoop大数据平台,每天都会通过ETL产生大量的文件到hdfs上,如何有效的去监测数据的有效性,防止数据的无限增长导致物理资源跟不上节奏,我们必须控制成本,让有限的资源发挥大数据的极致功能。本文介绍如何去分析hdfs上的文件变化情况,以及老生常谈的小文件的监控情况的一种实现方式。
Lu说
2022/06/07
1.1K0
[hadoop3.x系列]Hadoop常用文件存储格式及BigData File Viewer工具的使用(三)
[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
Maynor
2021/12/06
5840
[hadoop3.x系列]Hadoop常用文件存储格式及BigData File Viewer工具的使用(三)
hadoop开发库webhdfs使用介绍
Hadoop1.0版本已经提供了对Web方式访问的全面支持,包括读写和文件管理,用户可以使用curl模拟Http消息进行测试,下面是WebHDFS提供的操作列表功能清单:
数据饕餮
2019/01/14
6890
javaAPI操作hadoop hdfs
写在之前 在开始操作之前请确保已经正确安装启动hadoop并且能够连接到 依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId>
许喜朝
2020/09/29
6450
Hadoop3.x新特性
Hadoop3.x中增强了很多特性,并且也改进了很多地方。需要注意的是,在Hadoop3.x中,不能再使用jdk1.7,而是需要升级到jdk1.8以上版本。这是因为Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本,而这正是Hadoop3.x。Hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+磁盘,共同处理数据。
py3study
2020/01/06
2.4K0
相关推荐
HDFS的javaAPI操作(10)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验