您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java hadoop没有用于方案的文件系统:file

Java hadoop没有用于方案的文件系统:file

这是maven-assembly插件破坏事情的典型情况。

为什么这发生在我们身上 不同的JAR(hadoop-commonsfor LocalFileSystem,hadoop-hdfsfor DistributedFileSystem)各自org.apache.hadoop.fs.FileSystem在其Meta-INFO/services目录中包含一个不同的文件。该文件列出了要声明的文件系统实现的规范类名(这称为通过实现的服务提供者接口java.util.ServiceLoader,请参见org.apache.hadoop.FileSystem#loadFileSystems)。

当使用时maven-assembly-plugin,它将所有的JAR合并为一个,并且全部Meta-INFO/services/org.apache.hadoop.fs.FileSystem覆盖彼此。这些文件仅保留其中一个添加的最后一个)。在这种情况下,FileSystemfrom 的列表将hadoop-commons覆盖from 的列表hadoop-hdfs,因此DistributedFileSystem不再声明。

我们如何解决

在加载Hadoop配置之后,但在进行任何FileSystem相关操作之前,我们将其称为:

    hadoopConfig.set("fs.hdfs.impl", 
        org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
    );
    hadoopConfig.set("fs.file.impl",
        org.apache.hadoop.fs.LocalFileSystem.class.getName()
    );

更新:正确的修复 引起我注意的是krookedking,有一种基于配置的方法可以maven-assembly使用所有FileSystem服务声明的合并版本

java 2022/1/1 18:17:07 有494人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶