下面的代码将数据从我的本地机器复制到 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)
最佳答案
鉴于 Test.jar 是一个胖 JAR(包括依赖项),协议(protocol)处理程序的注册出现了问题。
如果您知道 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 中有更详细的描述。 .
安alternative fix记录在 HortonWorks 论坛上。
关于Java 异常 : No FileSystem for scheme,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660438/