Hadoop Java Client API搞砸了我的fsURI

时间:2015-11-19 14:52:46

标签: java spring hadoop webhdfs

我尝试在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这样的文件系统。< / p>

谷歌搜索这个,我找到了一个旧的邮件列表帖子,其中有人有同样的问题,但没有人回答过海报。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我很抱歉在这个回复中这么晚。

您可以利用Apache Knox默认拓扑URL。在您的描述中,您恰好使用名为knox_sample的拓扑。要将该拓扑作为&#34;默认拓扑&#34;进行访问,您必须将其配置为默认拓扑名称。请参阅:http://knox.apache.org/books/knox-0-7-0/user-guide.html#Default+Topology+URLs

默认&#34;默认拓扑&#34;名称是沙箱