Java 异常 : No FileSystem for scheme

标签 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)

最佳答案

鉴于 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/

相关文章:

java - 如何缩短此 KeyListener 代码

hadoop - 名称节点的Hadoop集群Http端口不起作用

scala - 从 Scala 文件创建可执行 jar 的问题

java - NoClassDefFoundError org/eclipse/swt/SWTError

java - 如果有很大的延迟,如何在可观察到的项目情绪之间运行函数?

java - 检查 j2me 中的互联网是否正常工作

hadoop - 有人有配置单元错误代码列表吗?

Hadoop Mapreduce tasktrackers 不断忽略 HADOOP_CLASSPATH。 Zookeeper 尝试连接到本地主机而不是集群地址

java - 导出为可运行Jar文件,java执行错误

Java - 返回字符串中特定字符的随机索引