0

我尝试在 Spring Boot 应用程序的 Java API 的帮助下访问 Hadoop Sandbox 中的 HDFS。我使用配置参数来指定访问文件系统的 URI spring.hadoop.fsUri。HDFS 本​​身受 Apache Knox 保护(对我而言,它应该充当处理身份验证的代理)。因此,如果我使用 curl 调用代理 URI,我将使用与不使用 Apache Knox 时完全相同的语义。例子:

curl -k -u guest:guest-password https://sandbox.hortonworks.com:8443/gateway/knox_sample/webhdfs/v1?op=GETFILESTATUS

问题是我无法使用 Hadoop 客户端库访问此网关。配置参数中的根 URL 为:

spring.hadoop.fsUri=swebhdfs://sandbox.hortonworks.com:8443/gateway/knox_sample/webhdfs/v1

所有请求都会出现错误 404,并且从日志中可以看到问题的原因:

2015-11-19 16:42:15.058 TRACE 26476 --- [nio-8090-exec-9] o.a.hadoop.hdfs.web.WebHdfsFileSystem    : url=https://sandbox.hortonworks.com:8443/webhdfs/v1/?op=GETFILESTATUS&user.name=tarmo

它破坏了我最初提供的 fsURI。如果我调试 Hadoop API 内部发生的事情,我发现它只需要域部分并从常量sandbox.hortonworks.com:8443附加到它。/webhdfs/v1/所以无论我原来的 URI 是什么,最后都会是https://my-provided-hostname/webhdfs/v1. 我知道它可能与swebhdfs://开头有关,但我不能https://直接使用,因为在这种情况下,如果没有像 https 这样的文件系统,会抛出异常。

谷歌搜索,我发现了一个旧的邮件列表线程,其中有人遇到了同样的问题,但没有人回答过海报。

有谁知道可以做些什么来解决这个问题?

4

1 回答 1

1

我很抱歉这么晚才回复。

您可以利用 Apache Knox 默认拓扑 URL。在您的描述中,您碰巧使用了一个名为 knox_sample 的拓扑。为了将该拓扑作为“默认拓扑”访问,您必须将其配置为默认拓扑名称。请参阅:http: //knox.apache.org/books/knox-0-7-0/user-guide.html#Default+Topology+URLs

默认的“默认拓扑”名称是沙盒

于 2016-01-18T15:08:50.403 回答