我有一个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网址,我会遇到例外情况:
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前缀,一切都会起作用。仍然没有找到Basic Auth问题的解决方案。