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

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

前言

目前博客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给我们返回了以下信息:

{
    "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#Cro
ss-Site_Request_Forgery_Prevention



目录
相关文章
|
8天前
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
28 0
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
|
30天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
21 3
|
1月前
|
Java API Maven
HDFS的API操作
HDFS的API操作
26 0
|
1月前
|
JSON 网络协议 API
PRC和HTTP(rest)过程的区别
PRC和HTTP(rest)过程的区别
|
4月前
|
存储 固态存储 文件存储
[hadoop3.x]HDFS存储类型和存储策略(五)概述
[hadoop3.x]HDFS存储类型和存储策略(五)概述
67 1
|
3天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
2月前
|
XML 自然语言处理 前端开发
NLP自学习平台提供了API接口调用服务,这些接口可以通过HTTP GET请求进行调用
【2月更文挑战第7天】NLP自学习平台提供了API接口调用服务,这些接口可以通过HTTP GET请求进行调用
18 2
|
2月前
|
Shell API
srs的http api鉴权
srs的http api鉴权
43 0
|
3月前
|
JSON Java API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
89 0
|
3月前
|
JSON 缓存 API
title: 深入理解REST API设计的最佳实践
title: 深入理解REST API设计的最佳实践
36 0