java异常:没有用于方案的FileSystem

时间:2015-11-11 21:46:07

标签: java hadoop jar

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

Configuration conf = new Configuration();                   
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));

FileSystem fs = FileSystem.get(conf);

fs.moveFromLocalFile(new Path("/path/to/file"), new Path("/path/to/hdfs/"));

当我在eclipse中运行它时,它完美地工作。但是,在我编译为jar并使用此代码单独运行之后:

nohup java -cp "Test.jar" Test &

我收到以下错误:

Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169)
at Test.main(Test.java:37)

2 个答案:

答案 0 :(得分:1)

鉴于Test.jar是一个胖JAR(包括依赖项),协议处理程序的注册出错了。

如果您知道Hadoop中提供它的软件包(例如,这是一个随机的,很可能是错误的,猜测),那么要覆盖它:

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

如果 org.apache.hadoop.fs.Handler 存在并扩展 java.net.URLStreamHandler ,那将会有效。

the JavaDocs for java.net.URL中详细描述了这种机制。

HortonWorks论坛上记录了alternative fix

答案 1 :(得分:0)

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

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

不幸的是,这对我没用。这是有效的。我必须将包含所有jar文件的路径添加到nohup java命令..

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