下面的代码将本地计算机的数据复制到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条答案
按热度按时间kuuvgm7e1#
假设test.jar是一个胖jar(包括依赖项),那么协议处理程序的注册就会出错。
如果您知道hadoop中提供它的包,那么要覆盖它,请执行以下操作(这是一个随机的,很可能是错误的猜测):
如果org.apache.hadoop.fs.handler存在并扩展了java.net.urlstreamhandler,这将起作用。
javadocsforjava.net.url中更详细地描述了这种机制。
hortonworks论坛上记录了另一种修复方法。
klh5stk12#
这是一个类路径问题。添加类路径的常用方法如下:
不幸的是这对我不起作用。这就是成功的原因。我不得不将包含所有jar文件的路径添加到nohupjava命令中。。