通过 HTTP 访问 Hadoop HDFS - 使用 HTTP 工具

安全性

开箱即用的 HttpFS 支持伪身份验证和 Kerberos HTTP SPNEGO 身份验证。

伪身份验证

使用伪身份验证时,必须在 HttpFS URL 的 user.name=<USERNAME> 查询字符串参数中指定用户名。例如

$ curl "http://<HTTFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=babu"

Kerberos HTTP SPNEGO 身份验证

Kerberos HTTP SPNEGO 身份验证需要支持 Kerberos HTTP SPNEGO 协议的工具或库。

重要事项:如果使用 curl,则所使用的 curl 版本必须支持 GSS(如果支持,则 curl -V 会打印出“GSS”)。

例如

$ kinit
Please enter the password for user@LOCALHOST:
$ curl --negotiate -u foo "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"
Enter host password for user 'foo':

注意:--negotiate 需要 -u USER 选项,但不会使用该选项。将任何值用作 USER,并在系统要求输入密码时按 [ENTER],因为系统会忽略密码值。

记住我的身份(建立经过身份验证的会话)

与大多数身份验证机制一样,Hadoop HTTP 身份验证对用户进行身份验证一次,并颁发一个短期身份验证令牌,以便在后续请求中出示。此身份验证令牌是一个已签名的 HTTP Cookie。

在使用诸如 curl 之类的工具时,必须在执行身份验证的第一个请求中存储身份验证令牌,并在后续请求中提交该令牌。要使用 curl 执行此操作,必须使用 -b-c 选项来保存和发送 HTTP Cookie。

例如,执行身份验证的第一个请求应保存收到的 HTTP Cookie。

使用伪身份验证

$ curl -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=foo"

使用 Kerberos HTTP SPNEGO 身份验证

$ curl --negotiate -u foo -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"

然后,后续请求转发先前收到的 HTTP Cookie

$ curl -b ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=liststatus"