首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java :方案没有FileSystem

java :方案没有FileSystem
EN

Stack Overflow用户
提问于 2015-11-11 21:46:07
回答 2查看 4.8K关注 0票数 2

下面的代码将数据从本地机器复制到hdfs

代码语言:javascript
复制
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并单独运行之后:

代码语言:javascript
复制
nohup java -cp "Test.jar" Test &

我得到的错误如下:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-12 19:29:26

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

代码语言:javascript
复制
export CLASSPATH=/usr/lib/hadoop/client-0.20/\*

不幸的是这对我不起作用。这就是起作用的。我必须将包含所有jar文件的路径添加到nohup命令中。

代码语言:javascript
复制
nohup java -cp "/usr/lib/hadoop/client-0.20/*:Test.jar" Test & 
票数 0
EN

Stack Overflow用户

发布于 2015-11-11 22:09:15

考虑到Test.jar是一个很胖的JAR (包括依赖项),协议处理程序的注册出现了问题。

如果您知道Hadoop中的包提供了类似的操作(这是一个随机的,而且很可能是错误的,猜测):

代码语言:javascript
复制
nohup java -cp Test.jar -Djava.protocol.handler.pkgs=org.apache.hadoop.fs Test &

如果存在org.apache.hadoop.fs.Handler并扩展java.net.URLStreamHandler.,则该方法将有效。

这个机制在JavaDocs for java.net.URL中有更详细的描述。

替代修复被记录在HortonWorks论坛上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33660438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档