我尝试在 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 这样的文件系统,会抛出异常。
谷歌搜索,我发现了一个旧的邮件列表线程,其中有人遇到了同样的问题,但没有人回答过海报。
有谁知道可以做些什么来解决这个问题?