gpt4 book ai didi

c# - 从 .Net 应用程序(控制台)访问受 kerberos 保护的 webhdfs

转载 作者:行者123 更新时间:2023-11-30 16:51:27 25 4
gpt4 key购买 nike

由于 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 协议(protocol)实现SPNEGO(太无聊了。。。)

~~~~

我知道从 Microsoft 世界访问 WebHDFS 的唯一方法是丑陋和复杂的解决方法:

  • 在机器上安装 MIT Kerberos for Windows 实用程序实际连接到 HDFS,加上适当的 Kerberos5 配置文件
  • 确保您的 JVM 具有“无限强度加密”安装了安全策略(单独下载,duh)
  • 开发一个连接到 WebHDFS 服务的小型 Java 实用程序(在NameNode)使用 SPNEGOGSSAPI Kerberos 票证

选项 1:通过 GUI 创建票证,并告诉 Java 在默认缓存中获取票证

选项 2:告诉 Java 使用 keytab 文件自动创建自己的票证(必须在 Linux 上使用 ktutil 创建;Windows 包中没有这样的实用程序) , 并忽略缓存

  • 使您的 Java 代码运行单个 GET,以检索 HDFS 委托(delegate)此 session 的 token ,然后将 token 转储到 StdOut,然后退出
  • 让您的 .Net 代码运行 Java 实用程序,捕获 StdOut,并取回 token
  • 在没有 SPNEGO 的情况下连接到 WebHDFS(NameNode + 最终重定向到 DataNodes),但在 URL 上插入 token 作为预身份验证的证明

所以最终还是Java的问题。设置一个有效的 Kerberos 配置非常棘手(参见 “门外的疯狂”,当前关于 Hadoop 生态系统中 Kerberos 实现问题的引用站点)

关于c# - 从 .Net 应用程序(控制台)访问受 kerberos 保护的 webhdfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33878290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com