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

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

作者头像
Maynor
发布2021-12-06 19:41:18
2.4K0
发布2021-12-06 19:41:18
举报
文章目录

前言

目前博客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
复制
{
    "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

后记

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 历史文章
  • 需求:
  • WebHDFS概述及操作
    • 简介
      • 关于RESTful
        • REST
        • RESTFul API
        • PUT请求类型和POST请求类型的区别
      • HDFS HTTP RESTFUL API
        • HTTP GET
        • HTTP PUT
        • HTTP POST
      • 文件系统URL和HTTP URL
        • 使用WebHDFS创建并写入到一个文件
          • 创建文件
          • 写入数据
      • 后记
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档