java - Hadoop Java 客户端 API 弄乱了我的 fsURI

标签 java spring hadoop webhdfs

我尝试在 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/

相关文章:

java - 如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?

java - 使用 Spring MVC 提供静态内容并渲染 JSP

spring - war 、 Spring 和 Tomcat 7

xpath - 将Xpath的输出保存在Hive表中

java - 如何执行更新

java - 可包裹 : Creating an instance of creator and implementing methods inline - CREATOR is an interface?

java - Java 程序中硬编码文本字符串的替代做法?

scala - 线程 “main”中的异常java.lang.IllegalArgumentException:实例化 'org.apache.spark.sql.hive.HiveSessionState'时出错:

hadoop namenode 没有格式化

java - J2SE 应用程序的事务管理