java异常:scheme没有文件系统

mrfwxfqh  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(544)

下面的代码将本地计算机的数据复制到hdfs

  1. Configuration conf = new Configuration();
  2. conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
  3. conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));
  4. FileSystem fs = FileSystem.get(conf);
  5. fs.moveFromLocalFile(new Path("/path/to/file"), new Path("/path/to/hdfs/"));

当我在eclipse中运行它时,它运行得非常好。但是,在我编译到jar并使用以下代码作为独立运行之后:

  1. nohup java -cp "Test.jar" Test &

我得到以下错误:

  1. Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs
  2. at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
  3. at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
  4. at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
  5. at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
  6. at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
  7. at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
  8. at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169)
  9. at Test.main(Test.java:37)
kuuvgm7e

kuuvgm7e1#

假设test.jar是一个胖jar(包括依赖项),那么协议处理程序的注册就会出错。
如果您知道hadoop中提供它的包,那么要覆盖它,请执行以下操作(这是一个随机的,很可能是错误的猜测):

  1. nohup java -cp Test.jar -Djava.protocol.handler.pkgs=org.apache.hadoop.fs Test &

如果org.apache.hadoop.fs.handler存在并扩展了java.net.urlstreamhandler,这将起作用。
javadocsforjava.net.url中更详细地描述了这种机制。
hortonworks论坛上记录了另一种修复方法。

klh5stk1

klh5stk12#

这是一个类路径问题。添加类路径的常用方法如下:

  1. export CLASSPATH=/usr/lib/hadoop/client-0.20/\*

不幸的是这对我不起作用。这就是成功的原因。我不得不将包含所有jar文件的路径添加到nohupjava命令中。。

  1. nohup java -cp "/usr/lib/hadoop/client-0.20/*:Test.jar" Test &

相关问题