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