我有一个 Spring Boot 应用程序,用于spring-yarn-boot:2.2.0.RELEASE
访问 Hadoop 文件系统 (HDFS)。我所做的操作是LISTSTATUS
,GETFILESTATUS
和OPEN
(读取文件)。HDFS URI 通过 application.properties 指定:
spring.hadoop.fsUri=webhdfs://127.0.0.1:50070/webhdfs/v1/
我制作了一个提供 Hadoop 配置的 bean(Spring 在启动时会以某种方式自动为我准备):
SimplerFileSystem fs = new SimplerFileSystem(FileSystem.get(configuration));
FsShell shell = new FsShell(configuration);
一切都按预期进行,但是当我有两个新要求时,问题就来了。
首先,从现在开始 HDFS 将受到 SSL 保护。我似乎找不到任何方法来告诉我的应用程序以 webhdfs:// 开头的 fsURI 实际上是一个 https 连接。如果我直接给出 https URL,我会得到一个例外:
java.io.IOException: No FileSystem for scheme: https
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
...这是由该代码引起的:FileSystem.get(configuration).
这件事让我发疯,我似乎没有找到办法通过这个。
第二个要求是,我需要使用基本身份验证对 WebHDFS 进行身份验证。为此,我在客户端 API 中也找不到任何方法。
有没有人以前做过并且有任何说明可以分享?或者也许有人知道我可以使用不同的客户端 API 来完成此操作?
一种选择是使用 RestTemplate 或任何其他 REST 服务使用者 API 自己实现 REST 调用,但这看起来不是那么特殊的用例,所以我真的希望已经完成了一些事情。
编辑:
找到了 HTTPS 问题的解决方案。一个应该swebhdfs://
用作 url 前缀,一切都会正常工作。仍然没有找到基本身份验证问题的解决方案。