WebHDFS REST API

Document Conventions

Monospaced

Used for commands, HTTP request and responses and code blocks.

<Monospaced>

User entered values.

[Monospaced]

Optional values. When the value is not specified, the default value is used.

Italics

Important phrases and words.

Introduction

HTTP REST API支持HDFSFileSystem/FileContext全部的API。HTTP操作和相应的FIleSystem/FileContext里的方法在下个部分展示。HTTP Query Parameter Dictionary部分详细的描述了默认值和有效值。

Operations

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)
  • GETDELEGATIONTOKENS (see FileSystem.getDelegationTokens)

HTTP PUT

  • CREATE (see FileSystem.create)
  • MKDIRS (see FileSystem.mkdirs)
  • CREATESYMLINK (see FileContext.createSymlink)
  • RENAME (see FileSystem.rename)
  • SETREPLICATION (see FileSystem.setReplication)
  • SETOWNER (see FileSystem.setOwner)
  • SETPERMISSION (see FileSystem.setPermission)
  • SETTIMES (see FileSystem.setTimes)
  • RENEWDELEGATIONTOKEN (see FileSystem.renewDelegationToken)
  • CANCELDELEGATIONTOKEN (see FileSystem.cancelDelegationToken)

HTTP POST

  • APPEND (see FileSystem.append)
  • CONCAT (see FileSystem.concat)

HTTP DELETE

  • DELETE (see FileSystem.delete)

FileSystem URIs vs HTTP URLs

WebHDFS文件系统的scheme是“webhdfs://”。一个WebHDFS文件系统的URL有下面的格式:

[html]  view plain copy
  1. webhdfs://<HOST>:<HTTP_PORT>/<PATH>  

下面是对应的HDFS的URL:

  
  
  
  
[html] view plain copy
  1. hdfs://<HOST>:<RPC_PORT>/<PATH>  

在REST API中,前缀” /webhdfs/v1”插入到path之前,一个query被增加到最后。因此,相应的HTTPURL有下面的格式:

  
  
  
  
[html] view plain copy
  1. http://<HOST>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=...  

HDFS Configuration Options

下面是HDFS配置中关于WebHDFS的配置属性:

Property Name

Description

dfs.webhdfs.enabled

Enable/disable WebHDFS in Namenodes and Datanodes

dfs.web.authentication.kerberos.principal

The HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint. The HTTP Kerberos principal MUST start with 'HTTP/' per Kerberos HTTP SPNEGO specification.

dfs.web.authentication.kerberos.keytab

The Kerberos keytab file with the credentials for the HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint.

Authentication

当security关闭的时候,认证的用户是在user.name查询参数中指定的用户。如果user.name参数没被设置,服务器设置认证用户为默认的web用户,如果是, if there is any, or return an error response。

当security开启时,认证通过Hadoop Delegation Token或者Kerberos SPNEGO执行。如果在delegation查询参数中设置了一个token,认证的用户就是编码进token的用户。如果delegation查询参数没有被设置,用户通过Kerberos SPNEGO认证。

下面是用curl命令工具的一下例子:

1.      当security关闭时的认证:

[html]  view plain copy
  1. curl -i"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]op=..."  

2.      当security开启时用Kerberos SPNEGO认证

[html]  view plain copy
  1. curl -i--negotiate -u :"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."  

3.      当security开启时用Hadoop Delegation Token认证

[html]  view plain copy
  1. curl -i"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=..."  

也可以查看:HTTP Authentication

Proxy Users

当代理用户特性开启时,一个代理用户P可以代表其他的用户U提交一个请求。U的用户名必须在doas查询参数中被指定,除非一个Delegation Token出现在认证中。在这种情况下,用户P和U的信息必须被编码进Delegation Token。

l  当security关闭时一个代理请求:

[html]  view plain copy
  1. curl -i"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]doas=<USER>&op=..."  

l  当security开启时用KerberosSPNEGO验证代理请求:

[html]  view plain copy
  1. curl -i --negotiate -u :"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?doas=<USER>&op=..."  

l  当security开启时用HadoopDelegation Token验证大力请求:

[html]  view plain copy
  1. curl -i"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=..."  

File and Directory Operations

Create and Write to a File

u  Step1:提交一个HTTP PUT请求,没有自动接着重定向,也没有发送文件数据。

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE  
  2.                     [&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>]  
  3.                     [&permission=<OCTAL>][&buffersize=<INT>]"  
请求被重定向到要被写入数据的文件所在的DataNode:
  
  
  
  
[html] view plain copy
  1. HTTP/1.1 307 TEMPORARY_REDIRECT  
  2. Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE...  
  3. Content-Length: 0  
u  Step2:用要被写入的文件数据,提交另一个HTTP PUT请求到上边返回的Header中的location的URL。
curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..."
         客户端收到一个201 Created响应,content-length为0,location header是一个WebHDFS的URL。
  
  
  
  
[html] view plain copy
  1. HTTP/1.1 201 Created  
  2. Location: webhdfs://<HOST>:<PORT>/<PATH>  
  3. Content-Length: 0  

注意:分成create/append两步的原因是为了防止客户端在重定向之前发送数据。这个问题在HTTP/1.1中可以通过加入"Expect: 100-continue"头解决。不幸的是,还有一些软件库存在bug(例如Jetty 6HTTP Server and java 6 HTTP Client),它们没有正确的实现"Expect: 100-continue"。通过create/append两步是针对软件库bug一个临时的解决方案。

See also: overwriteblocksizereplicationpermissionbuffersizeFileSystem.create

Append toa file

u  Step1:提交一个HTTP POST请求,不会自动接着重定向,不发送文件数据:

[html]  view plain copy
  1. curl -i -X POST"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=APPEND[&buffersize=<INT>]"  

请求重定向到要被附加数据的文件所在的datanode:

[html]  view plain copy
  1. HTTP/1.1 307TEMPORARY_REDIRECT  
  2. Location:http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND...  
  3. Content-Length: 0  

u  Step2:使用上边的Location Header的URL提交另一个附加了要被增加到文件的数据的HTTP POST请求:

[html]  view plain copy
  1. curl -i -X POST -T<LOCAL_FILE>"http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND..."  

客户端收到一个content-length为0的响应:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

可以参考上一部分的描述,为什么这个操作需要两步。

See also: buffersizeFileSystem.append

Concat File(s)

u  提交一个HTTP POST请求

[html]  view plain copy
  1. curl -i -X POST"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CONCAT&sources=<PATHS>"  

客户端收到一个content-length=0的响应:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: sourcesFileSystem.concat

Open and Read a File

u  提交一个自动重定向的HTTPGET请求

[html]  view plain copy
  1. curl -i -L"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN  
  2.                    [&offset=<LONG>][&length=<LONG>][&buffersize=<INT>]"  

请求重定向到可以读到文件数据的DataNode:

[html]  view plain copy
  1. HTTP/1.1 307TEMPORARY_REDIRECT  
  2. Location:http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=OPEN...  
  3. Content-Length: 0  

客户端接着重定向到DataNode,然后读取文件数据:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/octet-stream  
  3. Content-Length: 22  
  4.    
  5. Hello, webhdfsuser!  


See also: offsetlengthbuffersizeFileSystem.open

Make a Directory

u  提交一个HTTP PUT请求

[html]  view plain copy
  1. curl -i -X PUT"http://<HOST>:<PORT>/<PATH>?op=MKDIRS[&permission=<OCTAL>]"  

客户端收到一个Boolean JSON对象:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/json  
  3. Transfer-Encoding:chunked  
  4.    
  5. {"boolean":true}  

See also: permissionFileSystem.mkdirs

Create a Symbolic Link

u  提交一个HTTP PUT请求。

[html]  view plain copy
  1. curl -i -X PUT"http://<HOST>:<PORT>/<PATH>?op=CREATESYMLINK  
  2.                              &destination=<PATH>[&createParent=<true|false>]"  

         客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: destinationcreateParentFileSystem.createSymlink

Rename a File/Directory

u  提交一个HTTP PUT请求。

[html]  view plain copy
  1. curl -i -X PUT"<HOST>:<PORT>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>"  

客户端收到一个Boolean JSON对象:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/json  
  3. Transfer-Encoding:chunked  
  4.    
  5. {"boolean":true}  

See also: destinationFileSystem.rename

Delete a File/Directory

u  提交一个DELETE请求:

[html]  view plain copy
  1. curl -i -X DELETE"http://<host>:<port>/webhdfs/v1/<path>?op=DELETE  
  2.                               [&recursive=<true|false>]"  

客户端收到一个Boolean JSON对象:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/json  
  3. Transfer-Encoding:chunked  
  4.    
  5. {"boolean":true}  

See also: recursiveFileSystem.delete

Status of a File/Directory

u  提交一个HTTP GET请求

[html]  view plain copy
  1. curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"  

客户端收到一个FIleStatus JSON对象的响应:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/json  
  3. Transfer-Encoding:chunked  
  4.    
  5. {  
  6.   "FileStatus":  
  7.   {  
  8.     "accessTime"      : 0,  
  9.     "blockSize"       : 0,  
  10.     "group"           : "supergroup",  
  11.     "length"          : 0,             //in bytes, zero for directories  
  12.     "modificationTime":1320173277227,  
  13.     "owner"           : "webuser",  
  14.     "pathSuffix"      : "",  
  15.     "permission"      : "777",  
  16.     "replication"     : 0,  
  17.     "type"            : "DIRECTORY"    //enum {FILE, DIRECTORY, SYMLINK}  
  18.   }  
  19. }  

See also: FileSystem.getFileStatus

List a Directory

u  提交一个HTTP GET请求。

[html]  view plain copy
  1. curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"  

客户端收到一个FileStatuses JSON对象:

[html]  view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type:application/json  
  3. Content-Length: 427  
  4.    
  5. {  
  6.   "FileStatuses":  
  7.   {  
  8.     "FileStatus":  
  9.     [  
  10.       {  
  11.         "accessTime"      : 1320171722771,  
  12.         "blockSize"       : 33554432,  
  13.         "group"           : "supergroup",  
  14.         "length"          : 24930,  
  15.         "modificationTime":1320171722771,  
  16.         "owner"           : "webuser",  
  17.         "pathSuffix"      : "a.patch",  
  18.         "permission"      : "644",  
  19.         "replication"     : 1,  
  20.         "type"            : "FILE"  
  21.       },  
  22.       {  
  23.         "accessTime"      : 0,  
  24.         "blockSize"       : 0,  
  25.         "group"           : "supergroup",  
  26.         "length"          : 0,  
  27.         "modificationTime": 1320895981256,  
  28.         "owner"           : "szetszwo",  
  29.         "pathSuffix"      : "bar",  
  30.         "permission"      : "711",  
  31.         "replication"     : 0,  
  32.         "type"            : "DIRECTORY"  
  33.       },  
  34.       ...  
  35.     ]  
  36.   }  
  37. }  

See also: FileSystem.listStatus

Other File System Operations

Get Content Summary of aDirectory

u  提交一个HTTP GET请求。

[html]  view plain copy
  1. curl -i"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETCONTENTSUMMARY"  

     客户端收到一个ContentSummaryJSON对象:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "ContentSummary":  
  7.   {  
  8.     "directoryCount": 2,  
  9.     "fileCount"     : 1,  
  10.     "length"        : 24930,  
  11.     "quota"         : -1,  
  12.     "spaceConsumed" : 24930,  
  13.     "spaceQuota"    : -1  
  14.   }  
  15. }  

See also: FileSystem.getContentSummary

Get File Checksum

u  提交一个HTTP GET请求。

  
  
  
  
[html] view plain copy
  1. curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM"  
提交被重定向到一个DataNode。
  
  
  
  
[html] view plain copy
  1. HTTP/1.1 307 TEMPORARY_REDIRECT  
  2. Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM...  
  3. Content-Length: 0  
客户端跟着重定向到DataNode然后接收一个FileChecksum JSON对象:
  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "FileChecksum":  
  7.   {  
  8.     "algorithm": "MD5-of-1MD5-of-512CRC32",  
  9.     "bytes"    : "eadb10de24aa315748930df6e185c0d ...",  
  10.     "length"   : 28  
  11.   }  
  12. }  
See also: FileSystem.getFileChecksum

Get Home Directory

u  提交一个HTTP GET请求

  
  
  
  
[html] view plain copy
  1. curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETHOMEDIRECTORY"  

客户端收到一个PATH JSON对象的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {"Path": "/user/szetszwo"}  

See also: FileSystem.getHomeDirectory

Set Permission

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETPERMISSION  
  2.                               [&permission=<OCTAL>]"  

         客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: permissionFileSystem.setPermission

Set Owner

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETOWNER  
  2.                               [&owner=<USER>][&group=<GROUP>]"  

客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: ownergroupFileSystem.setOwner

Set Replication Factor

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION  
  2.                               [&replication=<SHORT>]"  

        客户端收到一个Boolean JSON对象的请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION  
  2.                               [&replication=<SHORT>]"  

See also: replicationFileSystem.setReplication

Set Access or ModificationTime

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETTIMES  
  2.                               [&modificationtime=<TIME>][&accesstime=<TIME>]"  

客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: modificationtimeaccesstimeFileSystem.setTimes

Modify ACL Entries

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=MODIFYACLENTRIES  
  2.                               &aclspec=<ACLSPEC>"  

客户端收到一个content-length=0的请求

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: FileSystem.modifyAclEntries

Remove ACL Entries

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEACLENTRIES  
  2.                               &aclspec=<ACLSPEC>"  

客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: FileSystem.removeAclEntries

Remove Default ACL

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEDEFAULTACL"  

客户端收到一个Content-Length=0的响应

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: FileSystem.removeDefaultAcl

Remove ACL

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEACL"  

客户端收到一个Content-Length=0响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: FileSystem.removeAcl

Set ACL

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETACL  
  2.                               &aclspec=<ACLSPEC>"  

客户端收到一个Content-Length=0的请求

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: FileSystem.setAcl

Get ACL Status

u  提交一个HTTP GET请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETACLSTATUS"  

客户端收到一个AclStatus JSON对象格式的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.     "AclStatus": {  
  7.         "entries": [  
  8.             "user:carla:rw-",   
  9.             "group::r-x"  
  10.         ],   
  11.         "group": "supergroup",   
  12.         "owner": "hadoop",   
  13.         "stickyBit": false  
  14.     }  
  15. }  

See also: FileSystem.getAclStatus

Delegation Token Operations

Get Delegation Token

u  提交一个HTTP GET 请求

  
  
  
  
[html] view plain copy
  1. curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETDELEGATIONTOKEN&renewer=<USER>"  

客户端收到一个Token JSON对象的请求

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "Token":  
  7.   {  
  8.     "urlString": "JQAIaG9y..."  
  9.   }  
  10. }  

See also: renewerFileSystem.getDelegationToken

Get Delegation Tokens

u  提交一个HTTP GET请求

  
  
  
  
[html] view plain copy
  1. curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETDELEGATIONTOKENS&renewer=<USER>"  

客户端收到一个Tokens JSON格式的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "Tokens":  
  7.   {  
  8.     "Token":  
  9.     [  
  10.       {  
  11.         "urlString":"KAAKSm9i ..."  
  12.       }  
  13.     ]  
  14.   }  
  15. }  

See also: renewerFileSystem.getDelegationTokens

Renew Delegation Token

u  提交一个HTTP PUT 请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=RENEWDELEGATIONTOKEN&token=<TOKEN>"  

客户端收到一个long型JSON对象的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {"long": 1320962673997}           //the new expiration time  

See also: tokenFileSystem.renewDelegationToken

Cancel Delegation Token

u  提交一个HTTP PUT请求

  
  
  
  
[html] view plain copy
  1. curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=CANCELDELEGATIONTOKEN&token=<TOKEN>"  

客户端收到一个Content-Length=0的响应:

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 200 OK  
  2. Content-Length: 0  

See also: tokenFileSystem.cancelDelegationToken

Error Responses

当一个操作失败,服务器可能会抛出一个错误。一个error响应的JSON格式定义在 RemoteExceptionJSON Schema中。下面的表格显示了exception到HTTP响应码的映射。

HTTP Response Codes

Exceptions

HTTP Response Codes

IllegalArgumentException

400 Bad Request

UnsupportedOperationException

400 Bad Request

SecurityException

401 Unauthorized

IOException

403 Forbidden

FileNotFoundException

404 Not Found

RumtimeException

500 Internal Server Error

下面是一些错误的响应的例子。

Illegal Argument Exception

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 400 Bad Request  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "RemoteException":  
  7.   {  
  8.     "exception"    : "IllegalArgumentException",  
  9.     "javaClassName": "java.lang.IllegalArgumentException",  
  10.     "message"      : "Invalid value for webhdfs parameter \"permission\": ..."  
  11.   }  
  12. }  

Security Exception

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 401 Unauthorized  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "RemoteException":  
  7.   {  
  8.     "exception"    : "SecurityException",  
  9.     "javaClassName": "java.lang.SecurityException",  
  10.     "message"      : "Failed to obtain user group information: ..."  
  11.   }  
  12. }  

Access Control Exception

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 403 Forbidden  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "RemoteException":  
  7.   {  
  8.     "exception"    : "AccessControlException",  
  9.     "javaClassName": "org.apache.hadoop.security.AccessControlException",  
  10.     "message"      : "Permission denied: ..."  
  11.   }  
  12. }  

File Not Found Exception

  
  
  
  
[html] view plain copy
  1. HTTP/1.1 404 Not Found  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "RemoteException":  
  7.   {  
  8.     "exception"    : "FileNotFoundException",  
  9.     "javaClassName": "java.io.FileNotFoundException",  
  10.     "message"      : "File does not exist: /foo/a.patch"  
  11.   }  
  12. }  

[html]  view plain copy
  1. HTTP/1.1 404 Not Found  
  2. Content-Type: application/json  
  3. Transfer-Encoding: chunked  
  4.    
  5. {  
  6.   "RemoteException":  
  7.   {  
  8.     "exception"    : "FileNotFoundException",  
  9.     "javaClassName": "java.io.FileNotFoundException",  
  10.     "message"      : "File does not exist: /foo/a.patch"  
  11.   }  
  12. }  

JSON Schemas

所有的操作,除了OPEN,要么返回一个长度为0的响应要么返回一个JSON响应。对于OPEN,响应是一个自己流。下面是JSON的模式。

注意,additionalProperties是默认值是一个空的模式,这允许为附加的属性设置任何值。因此,所有的WebHDFS JSON响应允许任何额外的属性。但是,如果响应中加入了额外的属性,为了保持兼容,它们被认为是可选的属性。

ACL Status JSON Schema

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "AclStatus",  
  3.   "properties":  
  4.   {  
  5.     "AclStatus":  
  6.     {  
  7.       "type"      : "object",  
  8.       "properties":  
  9.       {  
  10.         "entries":  
  11.         {  
  12.           "type": "array"  
  13.           "items":  
  14.           {  
  15.             "description": "ACL entry.",  
  16.             "type": "string"  
  17.           }  
  18.         },  
  19.         "group":  
  20.         {  
  21.           "description": "The group owner.",  
  22.           "type"       : "string",  
  23.           "required"   : true  
  24.         },  
  25.         "owner":  
  26.         {  
  27.           "description": "The user who is the owner.",  
  28.           "type"       : "string",  
  29.           "required"   : true  
  30.         },  
  31.         "stickyBit":  
  32.         {  
  33.           "description": "True if the sticky bit is on.",  
  34.           "type"       : "boolean",  
  35.           "required"   : true  
  36.         },  
  37.       }  
  38.     }  
  39.   }  
  40. }  

Boolean JSON Schema

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "boolean",  
  3.   "properties":  
  4.   {  
  5.     "boolean":  
  6.     {  
  7.       "description": "A boolean value",  
  8.       "type"       : "boolean",  
  9.       "required"   : true  
  10.     }  
  11.   }  
  12. }  

See also: MKDIRSRENAMEDELETESETREPLICATION

 

ContentSummary JSON Schema

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "ContentSummary",  
  3.   "properties":  
  4.   {  
  5.     "ContentSummary":  
  6.     {  
  7.       "type"      : "object",  
  8.       "properties":  
  9.       {  
  10.         "directoryCount":  
  11.         {  
  12.           "description": "The number of directories.",  
  13.           "type"       : "integer",  
  14.           "required"   : true  
  15.         },  
  16.         "fileCount":  
  17.         {  
  18.           "description": "The number of files.",  
  19.           "type"       : "integer",  
  20.           "required"   : true  
  21.         },  
  22.         "length":  
  23.         {  
  24.           "description": "The number of bytes used by the content.",  
  25.           "type"       : "integer",  
  26.           "required"   : true  
  27.         },  
  28.         "quota":  
  29.         {  
  30.           "description": "The namespace quota of this directory.",  
  31.           "type"       : "integer",  
  32.           "required"   : true  
  33.         },  
  34.         "spaceConsumed":  
  35.         {  
  36.           "description": "The disk space consumed by the content.",  
  37.           "type"       : "integer",  
  38.           "required"   : true  
  39.         },  
  40.         "spaceQuota":  
  41.         {  
  42.           "description": "The disk space quota.",  
  43.           "type"       : "integer",  
  44.           "required"   : true  
  45.         }  
  46.       }  
  47.     }  
  48.   }  
  49. }  

FileChecksum JSON Schema

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "FileChecksum",  
  3.   "properties":  
  4.   {  
  5.     "FileChecksum":  
  6.     {  
  7.       "type"      : "object",  
  8.       "properties":  
  9.       {  
  10.         "algorithm":  
  11.         {  
  12.           "description": "The name of the checksum algorithm.",  
  13.           "type"       : "string",  
  14.           "required"   : true  
  15.         },  
  16.         "bytes":  
  17.         {  
  18.           "description": "The byte sequence of the checksum in hexadecimal.",  
  19.           "type"       : "string",  
  20.           "required"   : true  
  21.         },  
  22.         "length":  
  23.         {  
  24.           "description": "The length of the bytes (not the length of the string).",  
  25.           "type"       : "integer",  
  26.           "required"   : true  
  27.         }  
  28.       }  
  29.     }  
  30.   }  
  31. }  

See also: GETFILECHECKSUM

FileStatus JSON Schema

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "FileStatus",  
  3.   "properties":  
  4.   {  
  5.     "FileStatus": fileStatusProperties      //See FileStatus Properties  
  6.   }  
  7. }  

See also: FileStatus PropertiesGETFILESTATUSFileStatus

FileStatus Properties

使用了Javascript的语法定义一个fileStatusProperties ,因此它可被在FileStatus和FileStatusesJSON模式中使用。

  
  
  
  
[html] view plain copy
  1. var fileStatusProperties =  
  2. {  
  3.   "type"      : "object",  
  4.   "properties":  
  5.   {  
  6.     "accessTime":  
  7.     {  
  8.       "description": "The access time.",  
  9.       "type"       : "integer",  
  10.       "required"   : true  
  11.     },  
  12.     "blockSize":  
  13.     {  
  14.       "description": "The block size of a file.",  
  15.       "type"       : "integer",  
  16.       "required"   : true  
  17.     },  
  18.     "group":  
  19.     {  
  20.       "description": "The group owner.",  
  21.       "type"       : "string",  
  22.       "required"   : true  
  23.     },  
  24.     "length":  
  25.     {  
  26.       "description": "The number of bytes in a file.",  
  27.       "type"       : "integer",  
  28.       "required"   : true  
  29.     },  
  30.     "modificationTime":  
  31.     {  
  32.       "description": "The modification time.",  
  33.       "type"       : "integer",  
  34.       "required"   : true  
  35.     },  
  36.     "owner":  
  37.     {  
  38.       "description": "The user who is the owner.",  
  39.       "type"       : "string",  
  40.       "required"   : true  
  41.     },  
  42.     "pathSuffix":  
  43.     {  
  44.       "description": "The path suffix.",  
  45.       "type"       : "string",  
  46.       "required"   : true  
  47.     },  
  48.     "permission":  
  49.     {  
  50.       "description": "The permission represented as a octal string.",  
  51.       "type"       : "string",  
  52.       "required"   : true  
  53.     },  
  54.     "replication":  
  55.     {  
  56.       "description": "The number of replication of a file.",  
  57.       "type"       : "integer",  
  58.       "required"   : true  
  59.     },  
  60.    "symlink":                                         //an optional property  
  61.     {  
  62.       "description": "The link target of a symlink.",  
  63.       "type"       : "string"  
  64.     },  
  65.    "type":  
  66.     {  
  67.       "description": "The type of the path object.",  
  68.       "enum"       : ["FILE", "DIRECTORY", "SYMLINK"],  
  69.       "required"   : true  
  70.     }  
  71.   }  
  72. };  

FileStatuses JSON Schema

一个FileStatuses  JSON对象代表一个FileStatusJSON对象的数组。

  
  
  
  
[html] view plain copy
  1. {  
  2.   "name"      : "FileStatuses",  
  3.   "properties":  
  4.   {  
  5.     "FileStatuses":  
  6.     {  
  7.       "type"      : "object",  
  8.       "properties":  
  9.       {  
  10.         "FileStatus":  
  11.         {  
  12.           "description": "An array of FileStatus",  
  13.           "type"       : "array",  
  14.           "items"      : fileStatusProperties      //See FileStatus Properties  
  15.         }  
  16.       }  
  17.     }  
  18.   }  
  19. }  

See also: FileStatus PropertiesLISTSTATUSFileStatus

你可能感兴趣的:(WebHDFS REST API)