介绍
Http Rest API支持完整的FileSystem方法。
Client和Namenode之间的通信是RPC通信吗?实现了两套逻辑吗?
FileSystem URIs vs HTTP URLs
webhdfs://host:http_port/path
hdfs://host:rpc_port/path
这两个路径等同
使用REST API时,/webhdfs/v1,然后加上?op=
为啥要有http客户端?明明rpc的了?rpc和http的使用区别是啥?
HDFS 配置选项
- dfs.web.authentication.kerberos.principal
- dfs.web.authentication.kerberos.keytabs
- dfs.webhdfs.socket.timeout
- dfs.webhdfs.socket.read-timeout
认证
支持不开安全模式
curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]op=…”
支持kerberos
curl -i --negotiate -u : “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=…”
支持Hadoop delegation
curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=…”
WebHdfs提供一个插件(默认两种实现方式),可以实现oauth2,这样客户端访问时就需要access token/credential
相关参数
- dfs.webhdfs.oauth2.enabled
- dfs.webhdfs.oauth2.access.token.provider
- dfs.webhdfs.oauth2.client.id
客户端ID用来获取凭据获取客户端ID - dfs.webhdfs.oauth2.refresh.url .
获取凭据/刷新令牌的url
SSL配置
增加一个ssl-client.xml
<configuration>
<property>
<name>ssl.client.truststore.location</name>
<value>/work/keystore.jks</value>
<description>Truststore to be used by clients. Must be specified.</description>
</property>
<property>
<name>ssl.client.truststore.password</name>
<value>changeme</value>
<description>Optional. Default value is "".</description>
</property>
<property>
<name>ssl.client.truststore.type</name>
<value>jks</value>
<description>Optional. Default value is "jks".</description>
</property>
</configuration>
core-site.xml增加
<property>
<name>hadoop.ssl.client.conf</name>
<value>ssl-client.xml</value>
<description>
Resource file from which ssl client keystore information will be extracted.
This file is looked up in the classpath, typically it should be in Hadoop
conf/ directory. Default value is "ssl-client.xml".
</description>
</property>
代理用户
代理用户代理另一个用户提交
1.如果安全模式关闭
curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]doas=<USER>&op=…”
2.使用kerberos
curl -i --negotiate -u : “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?doas=<USER>&op=…”
3.使用Hadoop委派
这个时候需要增加两个用户的delegation token
curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=…”
跨站点请求伪造
需要配置,增加用户自定义的http header.主要的作用是进行预防跨域请求控制。
- dfs.webhdfs.rest-csrf.enabled
- dfs.webhdfs.rest-csrf.custom-header
- dfs.webhdfs.rest-csrf.methods-to-ignore
重试策略
支持重试策略,用来处理比如说复制大文件超时,或者是HA故障转移时问题。
请求过滤
- dfs.datanode.httpserver.filter.handlers
写入datanode时的请求过滤 - dfs.web.authentication.host.allow.rules
- 什么网络,路径可以访问webhdfs
文件目录操作
创建和写入文件
- 创建文件
这一步不写入数据,返回数据节点 - 向datanode创建文件,并写入文件
没有指定权限的话,模式644。这一步不使用默认的fs.permission.umask-mode
都需要两步,需要和datanod的交互
其他文件操作
- 连接文件
- 打开读取文件
支持自动重定向 - 创建目录
- 重命名目录
- 删除文件
- 截断文件
- 文件状态
- list目录/目录
- 递归list目录
- 获取文件统计信息
- 获取文件配额信息
- 设置配额
- 获取文件校验和
- 设置ACL相关
- 设置owner
- 设置复制因子
- 设置存储相关
- 设置EC策略
- 创建snapshot
- Delegation 相关
除了读写,其他的只需要和host:port交互。读写还要和datanode交互(datanode的http port)
返回的是json
参数
- NoRedirect
是否重定向