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