由于 Kerberos 安全性,我无法从浏览器访问 WebHDFS。谁能帮我这个?
以下是浏览器中“http://****.****/webhdfs/v1/prod/snapshot_rpx/archive?op=LISTSTATUS&user.name=us”的错误
HTTP 错误 401
访问 /webhdfs/v1/prod/snapshot_rpx/archive 时出现问题。原因:需要身份验证
用于向此 URL 发出请求的 .Net 代码
HttpWebRequest http = (HttpWebRequest)WebRequest.Create(requestUri);
http.Timeout = timeout;
http.ContentType = contentType;
string responseData = string.Empty;
using (WebResponse response = http.GetResponse())
{
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
responseData = sr.ReadToEnd();
}
return responseData;
[重要的提醒]这个答案适用于使用 Linux KDC(通常是 MIT Kerberos)的普通 Hadoop 集群。对于依赖 Microsoft Active Directory KDC 的 Cloudera 集群,任何 .Net HTTP 连接器都可以使用 Microsoft SSPI 协议实现 SPNEGO(太无聊了...)
~~~~
我知道从 Microsoft 世界访问 WebHDFS 的唯一方法是丑陋且复杂的解决方法:
- install 适用于 Windows 的 MIT Kerberos机器上的实用程序将
实际连接到 HDFS,加上适当的 Kerberos5 配置文件
- 确保您的 JVM 具有“无限强度密码学”安装安全策略(单独下载,废话)
- 开发一个连接到 WebHDFS 服务的小型 Java 实用程序(在
NameNode)使用SPNEGO with a GSSAPIKerberos 票证
选项 1:通过 GUI 创建票证,并告诉 Java 在默认缓存中获取它
选项 2:告诉 Java 自动创建自己的票证,使用keytab文件(必须在 Linux 上创建ktutil
; Windows 软件包中没有此类实用程序),并忽略缓存
- 让您的 Java 代码运行单个 GET,以检索HDFS 委托
代币对于此会话,然后将令牌转储到 StdOut,然后退出
- 让您的 .Net 代码运行 Java 实用程序、捕获 StdOut 并
检索令牌
- 连接到 WebHDFS(NameNode + 最终重定向到 DataNode),无需 SPNEGO,
但在 URL 上插入令牌作为预身份验证的证明
所以最终还是Java的问题。设置有效的 Kerberos 配置非常棘手(参见《门外的疯狂》,当前有关 Hadoop 生态系统中 Kerberos 实现问题的参考站点)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)