HTTP REST API支持HDFS 的完整FileSystem / FileContext接口。下一部分显示了这些操作以及相应的FileSystem / FileContext方法。该科HTTP查询参数字典指定参数细节,诸如设定值和有效值。
WebHDFS的文件系统方案为“ webhdfs:// ”。WebHDFS文件系统URI具有以下格式。
webhdfs:// <主机>:<HTTP_PORT> / <PATH>
上面的WebHDFS URI对应于下面的HDFS URI。
hdfs:// <主机>:<RPC_PORT> / <PATH>
在REST API中,在路径中插入前缀“ / webhdfs / v1 ”,并在末尾附加查询。因此,相应的HTTP URL具有以下格式。
http:// <主机>:<HTTP_PORT> / webhdfs / v1 / <PATH>?op = ...
请注意,如果WebHDFS用SSL保护,则该方案应为“ swebhdfs:// ”。
swebhdfs:// <主机>:<HTTP_PORT> / <PATH>
另请参阅:SWebHDFS的SSL配置
以下是WebHDFS的HDFS配置选项。
| 物业名称 | 描述 |
|---|---|
| dfs.web.authentication.kerberos.principal | Hadoop-Auth在HTTP端点中使用的HTTP Kerberos主体。根据Kerberos HTTP SPNEGO规范,HTTP Kerberos主体必须以“ HTTP /”开头。值“ *”将使用在密钥表中找到的所有HTTP主体。 |
| dfs.web.authentication.kerberos.keytab | Kerberos密钥表文件,其中包含HTTP端点中Hadoop-Auth使用的HTTP Kerberos主体的凭据。 |
| dfs.webhdfs.socket.connect-timeout | 失败之前等待建立连接的时间。指定为持续时间,即数值后跟一个单位符号,例如2m,持续2分钟。默认值为60秒。 |
| dfs.webhdfs.socket.read-timeout | 失败之前等待数据到达的时间。默认值为60秒。 |
如果关闭安全性,则已认证的用户是user.name查询参数中指定的用户名。如果未设置user.name参数,则服务器可以将经过身份验证的用户设置为默认的Web用户(如果有),或者返回错误响应。
启用安全性后,将通过Hadoop委托令牌或Kerberos SPNEGO执行身份验证。如果在委托查询参数中设置了令牌,则经过身份验证的用户就是令牌中编码的用户。如果未设置委托参数,则通过Kerberos SPNEGO对用户进行身份验证。
以下是使用curl命令工具的示例。
关闭安全性时的身份验证:
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?[user.name = <USER>&] op = ...”
启用安全性后,使用Kerberos SPNEGO进行身份验证:
curl -i --negotiate -u:“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = ...”
启用安全性后,使用Hadoop委托令牌进行身份验证:
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?delegation = <TOKEN>&op = ...”
此外,WebHDFS在客户端支持OAuth2。Namenode和Datanode当前不支持使用OAuth2的客户端,但是其他实现WebHDFS REST接口的后端可能支持。
默认情况下,WebHDFS支持两种类型的OAuth2代码授予(用户提供的刷新和访问令牌或用户提供的凭据),并提供了一种可插拔的机制,用于根据OAuth2 RFC实现其他OAuth2身份验证或自定义身份验证。使用提供的任何一种代码授予机制时,WebHDFS客户端将根据需要刷新访问令牌。
仅应为未与Kerberos SPENGO一起运行的客户端启用OAuth2。
| OAuth2代码授予机制 | 描述 | 实施代码授权的dfs.webhdfs.oauth2.access.token.provider的值 |
|---|---|---|
| 授权码授予 | 用户提供初始访问令牌和刷新令牌,然后分别用于认证WebHDFS请求和获取替换访问令牌。 | org.apache.hadoop.hdfs.web.oauth2.ConfRefreshTokenBasedAccessTokenProvider |
| 客户证书授予 | 用户提供用于获取访问令牌的凭据,然后将其用于对WebHDFS请求进行身份验证。 | org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider |
以下属性控制OAuth2身份验证。
| OAuth2相关属性 | 描述 |
|---|---|
| dfs.webhdfs.oauth2.enabled | 布尔值,用于启用/禁用OAuth2身份验证 |
| dfs.webhdfs.oauth2.access.token.provider | org.apache.hadoop.hdfs.web.oauth.AccessTokenProvider的实现的类名称。 如上所述,提供了两个代码,或者用户可以指定用户提供的实现。此配置密钥的默认值为ConfCredentialBasedAccessTokenProvider实现。 |
| dfs.webhdfs.oauth2.client.id | 客户端ID用于获取具有凭证或刷新令牌的访问令牌 |
| dfs.webhdfs.oauth2.refresh.url | 用于发布以获取具有凭证或刷新凭证的承载凭证的URL |
| dfs.webhdfs.oauth2.access.token | (如果使用ConfRefreshTokenBasedAccessTokenProvider,则为必需)用于进行身份验证的初始访问令牌 |
| dfs.webhdfs.oauth2.refresh.token | (如果使用ConfRefreshTokenBasedAccessTokenProvider,则为必需)初始刷新令牌,用于获取新的访问令牌 |
| dfs.webhdfs.oauth2.refresh.token.expires.ms.since.epoch | (如果使用ConfRefreshTokenBasedAccessTokenProvider,则为必需。)自1970年1月1日以来以毫秒为单位的访问令牌到期时间。 请注意,该值与OAuth提供程序提供的值不同,并且已按照接口中的说明进行了修改,以适合客户端应用程序 |
| dfs.webhdfs.oauth2.credential | (如果使用ConfCredentialBasedAccessTokenProvider,则为必需)。用于获取初始访问令牌和后续访问令牌的凭据。 |
要使用SWebHDFS FileSystem(即使用swebhdfs协议),需要在客户端上指定SSL配置文件。这必须指定3个参数:
| SSL属性 | 描述 |
|---|---|
| ssl.client.truststore.location | 信任存储文件的本地文件系统位置,其中包含NameNode的证书。 |
| ssl.client.truststore.type | (可选)信任库文件的格式。 |
| ssl.client.truststore.password | (可选)信任库文件的密码。 |
以下是示例SSL配置文件(ssl-client.xml):
<配置>
<属性>
<name> ssl.client.truststore.location </ name>
<value> /work/keystore.jks </ value>
<description>客户端要使用的信任库。必须指定。</ description>
</ property>
<属性>
<name> ssl.client.truststore.password </ name>
<value> changeme </ value>
<说明>可选。默认值为“”。</ description>
</ property>
<属性>
<name> ssl.client.truststore.type </ name>
<value> jks </ value>
<说明>可选。默认值为“ jks”。</ description>
</ property>
</ configuration>
SSL配置文件必须在客户端程序的类路径中,并且文件名需要在core-site.xml中指定:
<属性>
<name> hadoop.ssl.client.conf </ name>
<value> ssl-client.xml </ value>
<说明>
从中提取ssl客户端密钥库信息的资源文件。
在类路径中查找此文件,通常应在Hadoop中
conf /目录。默认值为“ ssl-client.xml”。
</ description>
</ property>
当启用代理用户功能时,代理用户P可以代表另一个用户U提交请求。除非在身份验证中出现委派令牌,否则必须在doas查询参数中指定U的用户名。在这种情况下,用户P和U的信息都必须编码在委托令牌中。
安全性关闭时的代理请求:
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?[user.name = <USER>&] doas = <USER>&op = ...”
启用安全性后,使用Kerberos SPNEGO的代理请求:
curl -i --negotiate -u:“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?doas = <USER>&op = ...”
启用安全性后,使用Hadoop委托令牌的代理请求:
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?delegation = <TOKEN>&op = ...”
WebHDFS支持可选的可配置机制,以防止跨站点请求伪造(CSRF)。启用后,对NameNode或DataNode的WebHDFS HTTP请求必须包含一个自定义HTTP标头。配置属性允许调整受保护的特定HTTP方法以及HTTP标头的名称。标头中发送的值不相关。仅需要存在具有该名称的标头。
启用CSRF防护还可以设置WebHdfsFileSystem类以发送所需的标头。这样可以确保与webhdfs: URI 一起使用时,诸如hdfs dfs和hadoop distcp之类的CLI命令可以继续正常工作。
启用CSRF防护还可以设置NameNode Web UI来发送所需的标头。在启用CSRF防护并重新启动NameNode之后,NameNode Web UI的现有用户需要刷新浏览器以重新加载页面并查找新配置。
以下属性控制CSRF的预防。
| 属性 | 描述 | 默认值 |
|---|---|---|
| dfs.webhdfs.rest-csrf.enabled | 如果为true,则启用WebHDFS保护以防止跨站点请求伪造(CSRF)。WebHDFS客户端还使用此属性来确定是否需要在其HTTP请求中发送自定义CSRF阻止标头。 | 假 |
| dfs.webhdfs.rest-csrf.custom-header | 通过将dfs.webhdfs.rest-csrf.enabled设置为true为WebHDFS启用跨站点请求伪造(CSRF)防护时,HTTP请求必须发送的自定义标头的名称。WebHDFS客户端还使用此属性来确定是否需要在其HTTP请求中发送自定义CSRF阻止标头。 | X-XSRF接头 |
| dfs.webhdfs.rest-csrf。要忽略的方法 | 通过将dfs.webhdfs.rest-csrf.enabled设置为true为WebHDFS启用跨站点请求伪造(CSRF)防护时,HTTP方法的逗号分隔列表不需要HTTP请求包括自定义标头。WebHDFS客户端还使用此属性来确定是否需要在其HTTP请求中发送自定义CSRF阻止标头。 | GET,OPTIONS,HEAD,TRACE |
| dfs.webhdfs.rest-csrf.browser-useragents-regex | 通过将dfs.webhdfs.reset-csrf.enabled设置为true为WebHDFS启用跨站点请求伪造(CSRF)保护时,用逗号分隔的正则表达式列表,用于与HTTP请求的User-Agent标头匹配。如果传入的User-Agent与这些正则表达式中的任何一个匹配,则该请求被认为是由浏览器发送的,因此将强制执行CSRF防护。如果请求的User-Agent与这些正则表达式都不匹配,则认为该请求是由浏览器以外的其他设备(例如脚本化自动化)发送的。在这种情况下,CSRF并不是潜在的攻击媒介,因此无法执行预防措施。这有助于实现与尚未更新为发送CSRF预防标头的现有自动化的向后兼容性。 | ^ Mozilla。*,^ Opera。* |
以下是示例curl调用,该示例使用-H选项在请求中包括自定义标头。
curl -i -L -X PUT -H'X-XSRF-HEADER:“”''http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CREATE'
WebHDFS支持可选的,可配置的重试策略,用于弹性复制可能超时的大文件,或在复制过程中进行故障转移的HA群集之间复制文件。
以下属性控制WebHDFS重试和故障转移策略。
| 属性 | 描述 | 默认值 |
|---|---|---|
| dfs.http.client.retry.policy.enabled | 如果为“ true”,则启用WebHDFS客户端的重试策略。如果为“ false”,则重试策略已关闭。 | 假 |
| dfs.http.client.retry.policy.spec | 为WebHDFS客户端指定多个线性随机重试策略,例如,给定成对的重试次数和睡眠时间(n0,t0),(n1,t1)等…,前n0次重试平均睡眠t0毫秒,随后的n1次重试平均睡眠t1毫秒,依此类推。 | 10000,6,60000,10 |
| dfs.http.client.failover.max.attempts | 在网络异常的情况下,指定WebHDFS客户端的最大故障转移尝试次数。 | 15 |
| dfs.http.client.retry.max.attempts | 指定WebHDFS客户端的最大重试次数,如果重试次数和故障转移尝试之间的差异大于重试次数的最大值,则不会有更多重试。 | 10 |
| dfs.http.client.failover.sleep.base.millis | 指定以毫秒为单位的基本时间,在此基础上,将为WebHDFS客户端计算重试或故障转移之间的睡眠时间成指数增长。 | 500 |
| dfs.http.client.failover.sleep.max.millis | 指定WebHDFS客户端重试或故障转移之间的睡眠时间上限(以毫秒为单位)。 | 15000 |
步骤1:提交HTTP PUT请求,而不会自动跟随重定向,也不会发送文件数据。
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CREATE
[&overwrite = <true | false>] [&blocksize = <LONG>] [&replication = <SHORT>]
[&permission = <OCTAL>] [&buffersize = <INT>] [&noredirect = <true | false>]“
通常,将请求重定向到要写入文件数据的数据节点。
HTTP / 1.1 307 TEMPORARY_REDIRECT 位置:http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = CREATE ... 内容长度:0
但是,如果您不想自动重定向,则可以设置noredirect标志。
HTTP / 1.1 200 OK
内容类型:application / json
{“位置”:“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = CREATE ...”}
步骤2:使用位置标头中的URL提交另一个HTTP PUT请求(如果指定了noredirect,则返回返回的响应),并写入要写入的文件数据。
curl -i -X PUT -T <LOCAL_FILE>“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = CREATE ...”
客户端在位置标头中收到内容长度为零且文件的WebHDFS URI的201 Created响应:
HTTP / 1.1 201已创建 位置:webhdfs:// <HOST>:<PORT> / <PATH> 内容长度:0
如果未指定权限,将为新创建的文件分配默认的644权限。服务器端不会应用umask模式(因此,在Namenode端设置的“ fs.permissions.umask-mode”值配置将无效)。
请注意,具有两步创建/追加的原因是为了防止客户端在重定向之前发送数据。HTTP / 1.1中的“ Expect:100-continue ”头解决了此问题;参见RFC 2616,第8.2.3节。不幸的是,存在一些软件库错误(例如Jetty 6 HTTP服务器和Java 6 HTTP客户端),这些错误无法正确实现“ Expect:100-continue ”。分两步创建/添加是软件库错误的临时解决方法。
curl -i -X POST“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = APPEND [&buffersize = <INT>] [&noredirect = <true | false>]”
通常,将请求重定向到要附加文件数据的数据节点:
HTTP / 1.1 307 TEMPORARY_REDIRECT 位置:http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = APPEND ... 内容长度:0
但是,如果您不想自动重定向,则可以设置noredirect标志。
HTTP / 1.1 200 OK
内容类型:application / json
{“位置”:“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = APPEND ...”}
curl -i -X POST -T <LOCAL_FILE>“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = APPEND ...”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
有关为何需要此步骤两个步骤的说明,请参见上一节中的注释。
另请参见:buffersize,FileSystem .append
curl -i -X POST“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CONCAT&sources = <PATHS>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:来源,FileSystem .concat
curl -i -L“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = OPEN
[&offset = <LONG>] [&length = <LONG>] [&buffersize = <INT>] [&noredirect = <true | false>]”
通常,将请求重定向到一个可以读取文件数据的datanode:
HTTP / 1.1 307 TEMPORARY_REDIRECT 位置:http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = OPEN ... 内容长度:0
但是,如果您不想被自动重定向,则可以设置noredirect标志。
HTTP / 1.1 200 OK
内容类型:application / json
{“位置”:“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = OPEN ...”}
客户端遵循重定向到datanode并接收文件数据:
HTTP / 1.1 200 OK 内容类型:应用程序/八位字节流 内容长度:22 您好,webhdfs用户!
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = MKDIRS [&permission = <OCTAL>]”“
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“布尔值”:true}
如果未指定权限,则默认情况下,新创建的目录将具有755权限。服务器端不会应用umask模式(因此,在Namenode端设置的“ fs.permissions.umask-mode”值配置将无效)。
另请参见:权限,FileSystem .mkdirs
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CREATESYMLINK
&destination = <PATH> [&createParent = <true | false>]“
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:destination,createParent,FileSystem .createSymlink
curl -i -X PUT“ <主机>:<PORT> / webhdfs / v1 / <PATH>?op = RENAME&destination = <PATH>”
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“布尔值”:true}
另请参见:destination,FileSystem .rename
curl -i -X DELETE“ http:// <主机>:<端口> / webhdfs / v1 / <路径>?op = DELETE
[&recursive = <true | false>]”
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“布尔值”:true}
另请参阅:递归,FileSystem .delete
curl -i -X POST“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = TRUNCATE&newlength = <LONG>”
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“布尔值”:true}
另请参见:newlength,FileSystem .truncate
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETFILESTATUS”
客户端收到带有FileStatus JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ FileStatus”:
{
“ accessTime”:0,
“ blockSize”:0,
“ group”:“ supergroup”,
“ length”:0,//以字节为单位,目录为零
“ modificationTime”:1320173277227,
“ owner”:“ webuser”,
“ pathSuffix”:“”,
“权限”:“ 777”,
“复制”:0,
“ snapshotEnabled”:是
“ type”:“ DIRECTORY” //枚举{FILE,DIRECTORY,SYMLINK}
}
}
另请参阅:FileSystem .getFileStatus
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = LISTSTATUS”
客户端收到带有FileStatuses JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
内容长度:427
{
“ FileStatuses”:
{
“ FileStatus”:
[
{
“ accessTime”:1320171722771,
“ blockSize”:33554432,
“ childrenNum”:0,
“ fileId”:16388,
“ group”:“ supergroup”,
“长度”:24930,
“ modificationTime”:1320171722771,
“ owner”:“ webuser”,
“ pathSuffix”:“ a.patch”,
“ permission”:“ 644”,
“复制”:1,
“ storagePolicy”:0,
“ type”:“ FILE”
},
{
“ accessTime”:0,
“ blockSize”:0,
“ childrenNum”:0,
“ fileId”:16389,
“ group”:“ supergroup”,
“长度”:0,
“ modificationTime”:1320895981256,
“ owner”:“用户名”,
“ pathSuffix”:“ bar”,
“ permission”:“ 711”,
“复制”:0,
“ snapshotEnabled”:是
“ type”:“目录”
},
...
]
}
}
另请参阅:FileSystem .listStatus
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = LISTSTATUS”
客户端收到带有FileStatuses JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
内容长度:427
{
“ FileStatuses”:
{
“ FileStatus”:
[
{
“ accessTime”:1320171722771,
“ blockSize”:33554432,
“ childrenNum”:0,
“ fileId”:16390,
“ group”:“ supergroup”,
“长度”:1366,
“ modificationTime”:1501770633062,
“ owner”:“ webuser”,
“ pathSuffix”:“”,
“ permission”:“ 644”,
“复制”:1,
“ storagePolicy”:0,
“ type”:“ FILE”
}
]
}
}
另请参阅:FileSystem .listStatus
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = LISTSTATUS_BATCH&startAfter = <CHILD>”
客户端收到带有DirectoryListing JSON对象的响应,该对象包含FileStatuses JSON对象以及迭代信息:
HTTP / 1.1 200 OK
缓存控制:无缓存
过期:星期四,2016年9月8日03:40:38 GMT
日期:2016年9月8日,星期四03:40:38 GMT
语法:无缓存
过期:星期四,2016年9月8日03:40:38 GMT
日期:2016年9月8日,星期四03:40:38 GMT
语法:无缓存
内容类型:application / json
X框架选项:SAMEORIGIN
传输编码:分块
服务器:码头(6.1.26)
{
“ DirectoryListing”:{
“ partialListing”:{
“ FileStatuses”:{
“ FileStatus”:[
{
“ accessTime”:0,
“ blockSize”:0,
“ childrenNum”:0,
“ fileId”:16387,
“ group”:“ supergroup”,
“长度”:0,
“ modificationTime”:1473305882563,
“ owner”:“ andrew”,
“ pathSuffix”:“ bardir”,
“权限”:“ 755”,
“复制”:0,
“ storagePolicy”:0,
“ type”:“ DIRECTORY”
},
{
“ accessTime”:1473305896945,
“ blockSize”:1024,
“ childrenNum”:0,
“ fileId”:16388,
“ group”:“ supergroup”,
“长度”:0,
“ modificationTime”:1473305896965,
“ owner”:“ andrew”,
“ pathSuffix”:“ bazfile”,
“ permission”:“ 644”,
“复制”:3,
“ storagePolicy”:0,
“ type”:“ FILE”
}
]
}
},
“剩余条目”:2
}
}
如果剩余条目数不为零,则目录中还有其他条目。要查询下一个批次,请将startAfter参数设置为当前批次中返回的最后一个项目的pathSuffix。例如:
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = LISTSTATUS_BATCH&startAfter = bazfile”
它将返回下一批目录条目:
HTTP / 1.1 200 OK
缓存控制:无缓存
过期:星期四,2016年9月8日03:43:20 GMT
日期:2016年9月8日,星期四03:43:20 GMT
语法:无缓存
过期:星期四,2016年9月8日03:43:20 GMT
日期:2016年9月8日,星期四03:43:20 GMT
语法:无缓存
内容类型:application / json
X框架选项:SAMEORIGIN
传输编码:分块
服务器:码头(6.1.26)
{
“ DirectoryListing”:{
“ partialListing”:{
“ FileStatuses”:{
“ FileStatus”:[
{
“ accessTime”:0,
“ blockSize”:0,
“ childrenNum”:0,
“ fileId”:16386,
“ group”:“ supergroup”,
“长度”:0,
“ modificationTime”:1473305878951,
“ owner”:“ andrew”,
“ pathSuffix”:“ foodir”,
“权限”:“ 755”,
“复制”:0,
“ storagePolicy”:0,
“ type”:“ DIRECTORY”
},
{
“ accessTime”:1473305902864,
“ blockSize”:1024,
“ childrenNum”:0,
“ fileId”:16389,
“ group”:“ supergroup”,
“长度”:0,
“ modificationTime”:1473305902878,
“ owner”:“ andrew”,
“ pathSuffix”:“ quxfile”,
“ permission”:“ 644”,
“复制”:3,
“ storagePolicy”:0,
“ type”:“ FILE”
}
]
}
},
“剩余条目”:0
}
}
批处理大小由NameNode上的dfs.ls.limit选项控制。
另请参阅:FileSystem .listStatusIterator
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETCONTENTSUMMARY”
客户端收到带有ContentSummary JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ ContentSummary”:
{
“ directoryCount”:2
“ fileCount”:1
“长度”:24930,
“ quota”:-1,
“ spaceConsumed”:24930,
“ spaceQuota”:-1,
“ typeQuota”:
{
“存档”:
{
“已消耗”:500,
“ quota”:10000
},
“磁盘”:
{
“已消耗”:500,
“ quota”:10000
},
“ SSD”:
{
“已消耗”:500,
“ quota”:10000
}
}
}
}
另请参阅:FileSystem .getContentSummary
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETQUOTAUSAGE”
客户端收到带有QuotaUsage JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ QuotaUsage”:
{
“ fileAndDirectoryCount”:1
“ quota”:100,
“ spaceConsumed”:24930,
“ spaceQuota”:100000,
“ typeQuota”:
{
“存档”:
{
“已消耗”:500,
“ quota”:10000
},
“磁盘”:
{
“已消耗”:500,
“ quota”:10000
},
“ SSD”:
{
“已消耗”:500,
“ quota”:10000
}
}
}
}
另请参阅:FileSystem .getQuotaUsage
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETFILECHECKSUM”
通常,请求被重定向到数据节点:
HTTP / 1.1 307 TEMPORARY_REDIRECT 位置:http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = GETFILECHECKSUM ... 内容长度:0
但是,如果您不想自动重定向,则可以设置noredirect标志。
HTTP / 1.1 200 OK
内容类型:application / json
{“位置”:“ http:// <DATANODE>:<PORT> / webhdfs / v1 / <PATH>?op = GETFILECHECKSUM ...”}
客户端遵循重定向到datanode并接收FileChecksum JSON对象:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ FileChecksum”:
{
“ algorithm”:“ MD5-of-1MD5-of-512CRC32”,
“ bytes”:“ eadb10de24aa315748930df6e185c0d ...”,
“长度”:28
}
}
另请参阅:FileSystem .getFileChecksum
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 /?op = GETHOMEDIRECTORY”
客户端收到带有Path JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“路径”:“ /用户/用户名”}
另请参阅:FileSystem .getHomeDirectory
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETTRASHROOT”
客户端收到带有Path JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“路径”:“ /用户/用户名/。垃圾”}
如果该路径是加密的区域路径,并且用户具有该路径的权限,则客户端将收到如下响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“路径”:“ / PATH / .Trash /用户名”}
另请参阅:FileSystem .getTrashRoot
有关加密区域中的垃圾桶根的更多详细信息,请参阅《透明加密指南》。
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETPERMISSION
[&permission = <OCTAL>]”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:权限,FileSystem .setPermission
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETOWNER
[&owner = <USER>] [&group = <GROUP>]“
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:owner,group,FileSystem .setOwner
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETREPLICATION
[&replication = <SHORT>]”
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“布尔值”:true}
另请参见:复制,FileSystem .setReplication
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETTIMES
[&modificationtime = <TIME>] [&accesstime = <TIME>]“
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:modificationtime,accesstime,文件系统 .setTimes
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = MODIFYACLENTRIES
&aclspec = <ACLSPEC>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .modifyAclEntries
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = REMOVEACLENTRIES
&aclspec = <ACLSPEC>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .removeAclEntries
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = REMOVEDEFAULTACL”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .removeDefaultAcl
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = REMOVEACL”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .removeAcl
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETACL
&aclspec = <ACLSPEC>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .setAcl
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETACLSTATUS”
客户端收到带有AclStatus JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ AclStatus”:{
“条目”:[
“用户:carla:rw-”,
“ group :: rx”
],
“ group”:“ supergroup”,
“ owner”:“ hadoop”,
“ permission”:“ 775”,
“ stickyBit”:false
}
}
另请参阅:FileSystem .getAclStatus
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CHECKACCESS
&fsaction = <FSACTION>
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .access
curl -i“ http:// <主机>:<PORT> / webhdfs / v1?op = GETALLSTORAGEPOLICY”
客户端收到带有BlockStoragePolicies JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ BlockStoragePolicies”:{
“ BlockStoragePolicy”:[
{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[],
“ id”:2
“ name”:“ COLD”,
“ replicationFallbacks”:[],
“ storageTypes”:[“ ARCHIVE”]
},
{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[“ DISK”,“ ARCHIVE”],
“ id”:5
“ name”:“ WARM”,
“ replicationFallbacks”:[“ DISK”,“ ARCHIVE”],
“ storageTypes”:[“ DISK”,“ ARCHIVE”]
},
{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[],
“ id”:7
“ name”:“ HOT”,
“ replicationFallbacks”:[“ ARCHIVE”],
“ storageTypes”:[“ DISK”]
},
{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[“ SSD”,“ DISK”],
“ id”:10,“ name”:“ ONE_SSD”,
“ replicationFallbacks”:[“ SSD”,“ DISK”],
“ storageTypes”:[“ SSD”,“ DISK”]
},
{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[“ DISK”],
“ id”:12
“ name”:“ ALL_SSD”,
“ replicationFallbacks”:[“ DISK”],
“ storageTypes”:[“ SSD”]
},
{
“ copyOnCreateFile”:是的,
“ creationFallbacks”:[“ DISK”],
“ id”:15
“ name”:“ LAZY_PERSIST”,
“ replicationFallbacks”:[“ DISK”],
“ storageTypes”:[“ RAM_DISK”,“ DISK”]
}
]
}
}
另请参阅:FileSystem .getAllStoragePolicies
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETSTORAGEPOLICY
&storagepolicy = <策略>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .setStoragePolicy
curl -i -X POST“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = UNSETSTORAGEPOLICY”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .unsetStoragePolicy
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETSTORAGEPOLICY”
客户端收到带有BlockStoragePolicy JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ BlockStoragePolicy”:{
“ copyOnCreateFile”:否,
“ creationFallbacks”:[],
“ id”:7,
“ name”:“ HOT”,
“ replicationFallbacks”:[“ ARCHIVE”],
“ storageTypes”:[“ DISK”]
}
}
另请参阅:FileSystem .getStoragePolicy
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETFILEBLOCKLOCATIONS
客户端收到带有BlockLocations JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ BlockLocations”:
{
“ BlockLocation”:
[
{
“ cachedHosts”:[],
“ corrupt”:错误,
“主机”:[“主机”],
“ length”:134217728,//此块的长度
“ names”:[“ host:ip”],
“ offset”:0,//文件中块的偏移量
“ storageTypes”:[“ DISK”],//枚举{RAM_DISK,SSD,DISK,ARCHIVE}
“ topologyPaths”:[“ /默认机架/主机名:ip”]
},{
“ cachedHosts”:[],
“ corrupt”:错误,
“主机”:[“主机”],
“长度”:62599364,
“ names”:[“ host:ip”],
“偏移”:134217728,
“ storageTypes”:[“ DISK”],
“ topologyPaths”:[“ /默认机架/主机名:ip”]
},
...
]
}
}
另请参见:offset,length,FileSystem .getFileBlockLocations
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETXATTR
&xattr.name = <XATTRNAME>&xattr.value = <XATTRVALUE>
&flag = <FLAG>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .setXAttr
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = REMOVEXATTR
&xattr.name = <XATTRNAME>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .removeXAttr
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETXATTRS
&xattr.name = <XATTRNAME>&encoding = <ENCODING>”
客户端收到带有XAttrs JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ XAttrs”:[
{
“ name”:“ XATTRNAME”,
“值”:“ XATTRVALUE”
}
]
}
另请参阅:FileSystem .getXAttr
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETXATTRS
&xattr.name = <XATTRNAME1>&xattr.name = <XATTRNAME2>
&encoding = <编码>”
客户端收到带有XAttrs JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ XAttrs”:[
{
“名称”:“ XATTRNAME1”,
“值”:“ XATTRVALUE1”
},
{
“名称”:“ XATTRNAME2”,
“值”:“ XATTRVALUE2”
}
]
}
另请参阅:FileSystem .getXAttrs
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETXATTRS
&encoding = <编码>”
客户端收到带有XAttrs JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ XAttrs”:[
{
“名称”:“ XATTRNAME1”,
“值”:“ XATTRVALUE1”
},
{
“名称”:“ XATTRNAME2”,
“值”:“ XATTRVALUE2”
},
{
“名称”:“ XATTRNAME3”,
“值”:“ XATTRVALUE3”
}
]
}
另请参阅:FileSystem .getXAttrs
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = LISTXATTRS”
客户端收到带有XAttrNames JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ XAttrNames”:“ [\” XATTRNAME1 \“,\” XATTRNAME2 \“,\” XATTRNAME3 \“]”
}
另请参阅:FileSystem .listXAttrs
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 /?op = ENABLEECPOLICY
&ecpolicy = <策略>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:HDFSErasureCoding .enablePolicy
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 /?op = DISABLEECPOLICY
&ecpolicy = <策略>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:HDFSErasureCoding .disablePolicy
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = SETECPOLICY
&ecpolicy = <策略>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:HDFSErasureCoding .setErasureCodingPolicy
curl -i -X GET“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETECPOLICY
”
客户端收到带有ECPolicy JSON对象的响应:
{
“名称”:“ RS-10-4-1024k”,
“模式”:
{
“ codecName”:“ rs”,
“ numDataUnits”:10,
“ numParityUnits”:4
“ extraOptions”:{}
}
“ cellSize”:1048576,
“ id”:5,
“ codecname”:“ rs”,
“ numDataUnits”:10,
“ numParityUnits”:4
“ replicationpolicy”:false,
“ systemPolicy”:true
}
另请参见:HDFSErasureCoding .getErasureCodingPolicy
curl -i -X POST“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = UNSETECPOLICY
”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参见:HDFSErasureCoding .unsetErasureCodingPolicy
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = CREATESNAPSHOT [&snapshotname = <SNAPSHOTNAME>]”
客户端收到带有Path JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“路径”:“ /用户/用户名/.snapshot/s1”}
另请参阅:FileSystem .createSnapshot
curl -i -X DELETE“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = DELETESNAPSHOT&snapshotname = <快照名称>”
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .deleteSnapshot
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = RENAMESNAPSHOT
&oldsnapshotname = <快照名称>&snapshotname = <快照名称>“
客户端收到内容长度为零的响应:
HTTP / 1.1 200 OK 内容长度:0
另请参阅:FileSystem .renameSnapshot
curl -i GET“ http:// <主机>:<PORT> / webhdfs / v1 / <PATH>?op = GETSNAPSHOTDIFF
&oldsnapshotname = <快照名称>&snapshotname = <快照名称>“
客户端收到带有SnapshotDiffReport JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“ SnapshotDiffReport”:{“ diffList”:[],“ fromSnapshot”:“ s3”,“ snapshotRoot”:“ / foo”,“ toSnapshot”:“ s4”}}
curl -i GET“ http:// <主机>:<PORT> /webhdfs/v1/?user.name= <USER>&op = GETSNAPSHOTTABLEDIRECTORYLIST”
如果USER不是hdfs超级用户,则调用仅列出该用户拥有的快照表目录。如果USER是hdfs超级用户,则调用将列出所有snapshottable目录。客户端收到带有SnapshottableDirectoryList JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“ SnapshottableDirectoryList”:
[
{
“ dirStatus”:
{
“ accessTime”:0,
“ blockSize”:0,
“ childrenNum”:0,
“ fileId”:16386,
“ group”:“ hadoop”,
“长度”:0,
“修改时间”:1520761889225,
“ owner”:“ random”,
“ pathSuffix”:“ bar”,
“权限”:“ 755”,
“复制”:0,
“ storagePolicy”:0,
“ type”:“目录”
},
“ parentFullPath”:“ /”,
“ snapshotNumber”:0,
“快照配额”:65536
}
]
}
curl -i“ http:// <主机>:<PORT> / webhdfs / v1 /?op = GETDELEGATIONTOKEN
[&renewer = <用户>] [&服务= <服务>] [&种类= <种类>]”
客户端收到带有令牌 JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{
“令牌”:
{
“ urlString”:“ JQAIaG9y ...”
}
}
另请参见:更新器,FileSystem .getDelegationToken,种类,服务
curl -i -X PUT“ http:// <主机>:<PORT> / webhdfs / v1 /?op = RENEWDELEGATIONTOKEN&token = <令牌>”
客户端收到带有长 JSON对象的响应:
HTTP / 1.1 200 OK
内容类型:application / json
传输编码:分块
{“ long”:1320962673997} //新的到期时间
另见:令牌,DelegationTokenAuthenticator .renewDelegationToken
操作失败时,服务器可能会引发异常。错误响应的JSON模式在RemoteException JSON Schema中定义。下表显示了从异常到HTTP响应代码的映射。
| 例外情况 | HTTP响应码 |
|---|---|
| IllegalArgumentException | 400错误的要求 |
| UnsupportedOperationException | 400错误的要求 |
| SecurityException | 401未经授权 |
| IOException | 403禁止 |
| FileNotFoundException | 找不到404 |
| RuntimeException | 500内部服务器错误 |
以下是异常响应的示例。
HTTP / 1.1 400错误请求
内容类型:application / json
传输编码:分块
{
“ RemoteException”:
{
“ exception”:“ IllegalArgumentException”,
“ javaClassName”:“ java.lang.IllegalArgumentException”,
“ message”:“ webhdfs参数的无效值\” permission \“:...”
}
}
HTTP / 1.1 401未经授权
内容类型:application / json
传输编码:分块
{
“ RemoteException”:
{
“ exception”:“ SecurityException”,
“ javaClassName”:“ java.lang.SecurityException”,
“ message”:“无法获取用户组信息:...”
}
}
除OPEN之外的所有操作均返回零长度响应或JSON响应。对于OPEN,响应是一个八位字节流。JSON模式如下所示。有关JSON模式的语法定义,请参见draft-zyp-json-schema-03。
请注意,additionalProperties的默认值是一个空模式,该模式允许任何其他属性的值。因此,所有WebHDFS JSON响应均允许任何其他属性。但是,如果响应中包括其他属性,则它们将被视为可选属性,以保持兼容性。
{
“ name”:“ AclStatus”,
“属性”:
{
“ AclStatus”:
{
“ type”:“ object”,
“属性”:
{
“条目”:
{
“ type”:“ array”,
“项目”:
{
“ description”:“ ACL条目”,
“ type”:“字符串”
}
},
“组”:
{
“ description”:“群组所有者。”,
“ type”:“ string”,
“必填”:是
},
“所有者”:
{
“ description”:“所有者的用户。”,
“ type”:“ string”,
“必填”:是
},
“ stickyBit”:
{
“ description”:“如果粘性位打开,则为真。”,
“ type”:“ boolean”,
“必填”:是
}
}
}
}
}
{
“ name”:“ XAttrs”,
“属性”:
{
“ XAttrs”:
{
“ type”:“ array”,
“项目”:
{
“ type”:“ object”,
“属性”:
{
“名称”:
{
“ description”:“ XAttr名称。”,
“ type”:“ string”,
“必填”:是
},
“值”:
{
“ description”:“ XAttr值。”,
“ type”:“ string”
}
}
}
}
}
}
{
“ name”:“ XAttrNames”,
“属性”:
{
“ XAttrNames”:
{
“ description”:“ XAttr名称。”,
“ type”:“ string”,
“必填”:是
}
}
}
{
“ name”:“ boolean”,
“属性”:
{
“布尔值”:
{
“ description”:“布尔值”,
“ type”:“ boolean”,
“必填”:是
}
}
}
另请参见:MKDIRS,RENAME,DELETE,SETREPLICATION
{
“ name”:“ ContentSummary”,
“属性”:
{
“ ContentSummary”:
{
“ type”:“ object”,
“属性”:
{
“ directoryCount”:
{
“ description”:“目录数。”,
“ type”:“整数”,
“必填”:是
},
“ fileCount”:
{
“ description”:“文件数。”,
“ type”:“整数”,
“必填”:是
},
“长度”:
{
“ description”:“内容使用的字节数。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“此目录的名称空间配额。”,
“ type”:“整数”,
“必填”:是
},
“ spaceConsumed”:
{
“ description”:“内容占用的磁盘空间。”,
“ type”:“整数”,
“必填”:是
},
“ spaceQuota”:
{
“ description”:“磁盘空间配额。”,
“ type”:“整数”,
“必填”:是
},
“ typeQuota”:
{
“ type”:“ object”,
“属性”:
{
“存档”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
},
“磁盘”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
},
“ SSD”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
}
}
}
}
}
}
}
另请参阅:GETCONTENTSUMMARY
{
“ name”:“ QuotaUsage”,
“属性”:
{
“ QuotaUsage”:
{
“ type”:“ object”,
“属性”:
{
“ fileAndDirectoryCount”:
{
“ description”:“文件和目录的数量。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“此目录的名称空间配额。”,
“ type”:“整数”,
“必填”:是
},
“ spaceConsumed”:
{
“ description”:“内容占用的磁盘空间。”,
“ type”:“整数”,
“必填”:是
},
“ spaceQuota”:
{
“ description”:“磁盘空间配额。”,
“ type”:“整数”,
“必填”:是
},
“ typeQuota”:
{
“ type”:“ object”,
“属性”:
{
“存档”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
},
“磁盘”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
},
“ SSD”:
{
“ type”:“ object”,
“属性”:
{
“已消耗”:
{
“ description”:“消耗的存储类型空间。”,
“ type”:“整数”,
“必填”:是
},
“配额”:
{
“ description”:“存储类型配额。”,
“ type”:“整数”,
“必填”:是
}
}
}
}
}
}
}
}
}
另请参阅:GETQUOTAUSAGE
{
“ name”:“ FileChecksum”,
“属性”:
{
“ FileChecksum”:
{
“ type”:“ object”,
“属性”:
{
“算法”:
{
“ description”:“校验和算法的名称。”,
“ type”:“ string”,
“必填”:是
},
“字节”:
{
“ description”:“校验和的字节序列,以十六进制表示。”,
“ type”:“ string”,
“必填”:是
},
“长度”:
{
“ description”:“字节的长度(不是字符串的长度)。”,
“ type”:“整数”,
“必填”:是
}
}
}
}
}
{
“ name”:“ FileStatus”,
“属性”:
{
“ FileStatus”:fileStatusProperties //请参阅FileStatus属性
}
}
另请参阅:FileStatus属性,GETFILESTATUS,FileStatus
JavaScript语法用于定义fileStatusProperties,以便可以在FileStatus和FileStatuses JSON模式中引用它。
var fileStatusProperties =
{
“ type”:“ object”,
“属性”:
{
“ accessTime”:
{
“ description”:“访问时间。”,
“ type”:“整数”,
“必填”:是
},
“ blockSize”:
{
“ description”:“文件的块大小。”,
“ type”:“整数”,
“必填”:是
},
“组”:
{
“ description”:“群组所有者。”,
“ type”:“ string”,
“必填”:是
},
“长度”:
{
“ description”:“文件中的字节数。”,
“ type”:“整数”,
“必填”:是
},
“ modificationTime”:
{
“ description”:“修改时间。”,
“ type”:“整数”,
“必填”:是
},
“所有者”:
{
“ description”:“所有者的用户。”,
“ type”:“ string”,
“必填”:是
},
“ pathSuffix”:
{
“ description”:“路径后缀。”,
“ type”:“ string”,
“必填”:是
},
“允许”:
{
“ description”:“权限以八进制字符串表示。”,
“ type”:“ string”,
“必填”:是
},
“复制”:
{
“ description”:“文件的复制数。”,
“ type”:“整数”,
“必填”:是
},
“ symlink”://可选属性
{
“ description”:“符号链接的链接目标。”,
“ type”:“ string”
},
“类型”:
{
“ description”:“路径对象的类型。”,
“枚举”:[“文件”,“目录”,“ SYMLINK”],
“必填”:是
}
}
};
甲FileStatuses JSON对象表示的阵列时间filestatus JSON对象。
{
“ name”:“ FileStatuses”,
“属性”:
{
“ FileStatuses”:
{
“ type”:“ object”,
“属性”:
{
“ FileStatus”:
{
“ description”:“ FileStatus的数组”,
“ type”:“ array”,
“ items”:fileStatusProperties //请参阅FileStatus属性
}
}
}
}
}
一个Directory上市 JSON对象表示了一批目录条目,而迭代列出目录。它包含一个FileStatuses JSON对象以及迭代信息。
{
“ name”:“ DirectoryListing”,
“属性”:
{
“ DirectoryListing”:
{
“ type”:“ object”,
“属性”:
{
“ partialListing”:
{
“ description”:“部分目录清单”,
“ type”:“ object”,//一个FileStatuses对象
“必填”:是
},
“剩余条目”:
{
“ description”:“剩余条目数”,
“ type”:“整数”,
“必填”:是
}
}
}
}
}
{
“ name”:“ long”,
“属性”:
{
“长”:
{
“ description”:“一个长整数值”,
“ type”:“整数”,
“必填”:是
}
}
}
另请参阅:RENEWDELEGATIONTOKEN,
{
“ name”:“ Path”,
“属性”:
{
“路径”:
{
“ description”:“字符串表示路径。”,
“ type”:“ string”,
“必填”:是
}
}
}
另请参阅:GETHOMEDIRECTORY,路径
{
“ name”:“ RemoteException”,
“属性”:
{
“ RemoteException”:
{
“ type”:“ object”,
“属性”:
{
“例外”:
{
“ description”:“例外名称”,
“ type”:“ string”,
“必填”:是
},
“信息”:
{
“ description”:“异常消息”,
“ type”:“ string”,
“必填”:是
},
“ javaClassName”://可选属性
{
“ description”:“异常的Java类名称”,
“ type”:“ string”
}
}
}
}
}
另请参阅:错误响应
{
“ name”:“令牌”,
“属性”:
{
“令牌”:tokenProperties //请参阅令牌属性
}
}
另请参见:令牌属性,GETDELEGATIONTOKEN,委托中的注释。
{
“ name”:“ BlockStoragePolicy”,
“属性”:
{
“ BlockStoragePolicy”:blockStoragePolicyProperties //请参阅BlockStoragePolicy属性
}
}
另请参阅:BlockStoragePolicy属性,GETSTORAGEPOLICY
JavaScript语法用于定义blockStoragePolicyProperties,以便可以在BlockStoragePolicy和BlockStoragePolicies JSON模式中引用它。
var blockStoragePolicyProperties =
{
“ type”:“ object”,
“属性”:
{
“ID”:
{
“ description”:“政策ID。”,
“ type”:“整数”,
“必填”:是
},
“名称”:
{
“ description”:“政策名称。”,
“ type”:“ string”,
“必填”:是
},
“ storageTypes”:
{
“ description”:“用于块放置的存储类型的数组。”,
“ type”:“ array”,
“必填”:是
“项目”:
{
“ type”:“字符串”
}
},
“ replicationFallbacks”:
{
“ description”:“用于复制的后备存储类型数组。”,
“ type”:“ array”,
“必填”:是
“项目”:
{
“ type”:“字符串”
}
},
“ creationFallbacks”:
{
“ description”:“用于文件创建的后备存储类型的数组。”,
“ type”:“ array”,
“必填”:是
“项目”:
{
“ type”:“字符串”
}
},
“ copyOnCreateFile”:
{
“ description”:“如果设置,则在创建文件后无法更改策略。”,
“ type”:“ boolean”,
“必填”:是
}
}
};
{
“名称”:“ RS-10-4-1024k”,
模式{
“ codecName”:“ rs”,
“ numDataUnits”:10,
“ numParityUnits”:4
“ extraOptions”:{}
}
“ cellSize”:1048576,
“ id”:5,
“ codecname”:“ rs”,
“ numDataUnits”:10,
“ numParityUnits”:4
“ replicationpolicy”:false,
“ systemPolicy”:true
}
甲BlockStoragePolicies JSON对象表示的阵列BlockStoragePolicy JSON对象。
{
“ name”:“ BlockStoragePolicies”,
“属性”:
{
“ BlockStoragePolicies”:
{
“ type”:“ object”,
“属性”:
{
“ BlockStoragePolicy”:
{
“ description”:“ BlockStoragePolicy的数组”,
“ type”:“ array”,
“ items”:blockStoragePolicyProperties //请参见BlockStoragePolicy属性
}
}
}
}
}
{
“ name”:“ SnapshotDiffReport”,
“ type”:“对象”,
“属性”:
{
“ SnapshotDiffReport”:
{
“ type”:“ object”,
“属性”:
{
“ diffList”:
{
“ description”:“ DiffReportEntry的数组”,
“ type”:“ array”,
“ items”:diffReportEntries,
“必填”:是
},
“ fromSnapshot”:
{
“ description”:“源快照”,
“ type”:“ string”,
“必填”:是
},
“ snapshotRoot”:
{
“ description”:“快照根路径的字符串表示形式”,
“ type”:“ string”,
“必填”:是
},
“ toSnapshot”:
{
“ description”:“目标快照”,
“ type”:“ string”,
“必填”:是
}
}
}
}
}
JavaScript语法用于定义diffReportEntries,以便可以在SnapshotDiffReport JSON模式中引用它。
var diffReportEntries =
{
“ type”:“对象”,
“属性”:
{
“ sourcePath”:
{
“ description”:“相对于快照根的源路径名”,
“ type”:“ string”,
“必填”:是
},
“ targetPath”:
{
“ description”:“相对于用于重命名的快照根的目标路径”,
“ type”:“ string”,
“必填”:是
},
“类型”:
{
“ description”:“差异报告条目类型”,
“枚举”:[“创建”,“修改”,“删除”,“重命名”],
“必填”:是
}
}
}
{
“ name”:“ SnapshottableDirectoryList”,
“ type”:“对象”,
“属性”:
{
“ SnapshottableDirectoryList”:
{
“ description”:“ SnapshottableDirectoryStatus的数组”,
“ type”:“ array”,
“ items”:snapshottableDirectoryStatus,
“必填”:是
}
}
}
JavaScript语法用于定义snapshottableDirectoryStatus,以便可以在SnapshottableDirectoryList JSON模式中引用它。
var snapshottableDirectoryStatus =
{
“ type”:“对象”,
“属性”:
{
“ dirStatus”:fileStatusProperties,
“ parentFullPath”:
{
“ description”:“快照表目录的父级的完整路径”,
“ type”:“ string”,
“必填”:是
},
“快照编号”:
{
“ description”:“在snapshottable目录上创建的快照数”,
“ type”:“整数”,
“必填”:是
},
“ snapshotQuota”:
{
“ description”:“快照表目录中允许的快照总数”,
“ type”:“整数”,
“必填”:是
}
}
}
甲BlockLocations JSON对象表示的阵列BlockLocation JSON对象。
{
“ name”:“ BlockLocations”,
“属性”:
{
“ BlockLocations”:
{
“ type”:“ object”,
“属性”:
{
“ BlockLocation”:
{
“ description”:“ BlockLocation的数组”,
“ type”:“ array”,
“ items”:blockLocationProperties //参见BlockLocation属性
}
}
}
}
}
{
“ name”:“ BlockLocation”,
“属性”:
{
“ BlockLocation”:blockLocationProperties //请参见BlockLocation属性
}
}
另请参见BlockLocation属性,GETFILEBLOCKLOCATIONS,BlockLocation
JavaScript语法用于定义blockLocationProperties,以便可以在BlockLocation和BlockLocations JSON模式中引用它。
var blockLocationProperties =
{
“ type”:“ object”,
“属性”:
{
“ cachedHosts”:
{
“ description”:“具有缓存副本的Datanode主机名”,
“ type”:“ array”,
“ required”:“ true”,
“项目”:
{
“ description”:“一个数据节点主机名”,
“ type”:“ string”
}
},
“腐败”:
{
“ description”:“如果该块已损坏,则为真”,
“ type”:“ boolean”,
“ required”:“ true”
},
“主机”:
{
“ description”:“ Datanode主机名存储该块”,
“ type”:“ array”,
“ required”:“ true”,
“项目”:
{
“ description”:“一个数据节点主机名”,
“ type”:“ string”
}
},
“长度”:
{
“ description”:“块的长度”,
“ type”:“整数”,
“ required”:“ true”
},
“名称”:
{
“ description”:“用于访问块的数据节点IP:xferPort”,
“ type”:“ array”,
“ required”:“ true”,
“项目”:
{
“ description”:“ DatanodeIP:xferPort”,
“ type”:“ string”
}
},
“偏移”:
{
“ description”:“文件中块的偏移量”,
“ type”:“整数”,
“ required”:“ true”
},
“ storageTypes”:
{
“ description”:“每个副本的存储类型”,
“ type”:“ array”,
“ required”:“ true”,
“项目”:
{
“ description”:“存储类型”,
“枚举”:[“ RAM_DISK”,“ SSD”,“ DISK”,“ ARCHIVE”]
}
},
“ topologyPaths”:
{
“ description”:“网络拓扑中的数据节点地址”,
“ type”:“ array”,
“ required”:“ true”,
“项目”:
{
“ description”:“ / rack / host:ip”,
“ type”:“ string”
}
}
}
};
| 名称 | xattr.name |
|---|---|
| 描述 | 文件/目录的XAttr名称。 |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | 任何以user./trusted./system./security。开头的字符串 |
| 句法 | 任何以user./trusted./system./security。开头的字符串 |
| 名称 | createflag |
|---|---|
| 描述 | 创建文件时要处理的可能标志的枚举 |
| 类型 | 枚举字符串 |
| 默认值 | <空> |
| 有效值 | 创建,覆盖,附加和sync_block的合法组合 |
| 句法 | 请参阅下面的注释 |
以下组合无效:*追加,创建*创建,追加,覆盖
另请参阅:创建
| 名称 | 代表团 |
|---|---|
| 描述 | 用于身份验证的委托令牌。 |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | 编码令牌。 |
| 句法 | 请参阅下面的注释。 |
请注意,委派令牌被编码为URL安全字符串。见encodeToUrlString()和decodeFromUrlString(字符串)在org.apache.hadoop.security.token.Token的编码的细节。
另请参阅:身份验证
| 名称 | 目的地 |
|---|---|
| 描述 | 目标路径。 |
| 类型 | 路径 |
| 默认值 | <empty>(无效路径) |
| 有效值 | 没有方案和权限的绝对FileSystem路径。 |
| 句法 | 任何路径。 |
另请参阅:CREATESYMLINK,RENAME
| 名称 | 派系 |
|---|---|
| 描述 | 文件系统操作读/写/执行 |
| 类型 | 串 |
| 默认值 | 空(无效值) |
| 有效值 | 匹配正则表达式模式“ [r-] [w-] [x-]”的字符串 |
| 句法 | “ [r-] [w-] [x-]” |
另请参阅:CHECKACCESS,
| 名称 | 允许 |
|---|---|
| 描述 | 文件/目录的权限。 |
| 类型 | 八进制 |
| 默认值 | 文件为644,目录为755 |
| 有效值 | 0-1777 |
| 句法 | 任何基数8的整数(前导零可以省略。) |
另请参见:CREATE,MKDIRS,SETPERMISSION
| 名称 | 代币 |
|---|---|
| 描述 | 用于操作的委托令牌。 |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | 编码令牌。 |
| 句法 | 请参阅授权中的注释。 |
| 名称 | 类 |
|---|---|
| 描述 | 请求的委托令牌的种类 |
| 类型 | 串 |
| 默认值 | <empty>(服务器设置服务的默认种类) |
| 有效值 | 表示令牌类型的字符串,例如“ HDFS_DELEGATION_TOKEN”或“ WEBHDFS委托” |
| 句法 | 任何字符串。 |
另请参阅:GETDELEGATIONTOKEN
| 名称 | 服务 |
|---|---|
| 描述 | 应该使用令牌的服务的名称,例如namenode的ip:port |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | ip:port字符串格式或服务的逻辑名称 |
| 句法 | 任何字符串。 |
另请参阅:GETDELEGATIONTOKEN
| 名称 | 存储策略 |
|---|---|
| 描述 | 存储策略的名称。 |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | 任何有效的存储策略名称;请参阅GETALLSTORAGEPOLICY。 |
| 句法 | 任何字符串。 |
另请参阅:SETSTORAGEPOLICY
| 名称 | startAfter |
|---|---|
| 描述 | liststatus批处理中返回的最后一项。 |
| 类型 | 串 |
| 默认值 | <空> |
| 有效值 | 任何有效的文件/目录名称。 |
| 句法 | 任何字符串。 |
另请参阅:LISTSTATUS_BATCH