当前位置:   article > 正文

Exception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for sc

exception in thread "main" org.apache.hadoop.fs.unsupportedfilesystemexcepti

问题描述

java代码,打包到虚拟机,希望运行后在HDFS创建一个文件夹 /java。代码如下:

public class HdfsStart {
    private FileSystem fs;
    // 初始化
    public void init() throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        fs = FileSystem.get(new URI("hdfs://localhost:9000"),conf);
    }

    // 创建文件夹
    public void testMkdir() throws IOException {
        boolean flag = fs.mkdirs(new Path("/java"));
        System.out.println(flag);
    }

    /**
     * 创建成功则会输出true
     * @param args
     * @throws InterruptedException
     * @throws IOException
     * @throws URISyntaxException
     */
    public static void main(String[] args) throws InterruptedException, IOException, URISyntaxException {
        HdfsStart hdfsStart = new HdfsStart();
        hdfsStart.init();
        hdfsStart.testMkdir();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

当然,虚拟机系统上也启动了hdfs服务(sbin/start-dfs.sh
打包上传后运行方法为:

$ java -jar hadoop-demo.jar
  • 1

报错如下:

Exception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"
	at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3281)
	at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3301)
	at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:124)
	at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3352)
	at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3320)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:479)
	at cn.smileyan.hadoop.hdfs.HdfsStart.init(HdfsStart.java:20)
	at cn.smileyan.hadoop.hdfs.HdfsStart.main(HdfsStart.java:38)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

解决方法

运行时改用命令如下:

$ bin/hadoop jar hadoop-demo.jar
  • 1

补充

Hadoop大数据开发案例教程与项目实战》(时允田、林雪纲主编)书中,因为开发环境(eclipse)和部署环境相同(同一个CentOS系统),所以教程可以直接运行,但是我在Windows系统上使用IDEA开发,所以需要打包,再上传运行。

因为运行时使用bin/hadoop jar hadoop-demo.jar 运行,所以pom文件中跟hadoop相关的依赖在打包时都可以去掉,也就是pom文件中依赖的scope 属性设置为 provided,然后再打包就可以发现jar文件很小,上传简单。

另一种解决方法

添加相应的依赖包。

		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.2.1</version>
        </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Smileyan
2019年10月21日 20:08

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/519470
推荐阅读
相关标签
  

闽ICP备14008679号