我尝试在 Spring Boot 应用程序的 Java API 的帮助下访问 Hadoop 沙箱中的 HDFS。我使用配置参数 spring.hadoop.fsUri
指定访问文件系统的 URI。 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 这样的文件系统。
谷歌搜索,我发现了一个旧的邮件列表线程,其中有人遇到了同样的问题,但从来没有人回答过张贴者。
有谁知道可以做些什么来解决这个问题?
最佳答案
很抱歉这么晚才回复。
您可以利用 Apache Knox 默认拓扑 URL。在您的描述中,您恰好使用了一个名为 knox_sample 的拓扑。为了访问该拓扑作为“默认拓扑”,您必须将其配置为默认拓扑名称。请参阅:http://knox.apache.org/books/knox-0-7-0/user-guide.html#Default+Topology+URLs
默认的“默认拓扑”名称是沙箱
关于java - Hadoop Java 客户端 API 弄乱了我的 fsURI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807174/