下面的代码将数据从本地机器复制到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)发布于 2015-11-12 19:29:26
这是一个类路径问题。添加类路径的常用方法如下:
export CLASSPATH=/usr/lib/hadoop/client-0.20/\*不幸的是这对我不起作用。这就是起作用的。我必须将包含所有jar文件的路径添加到nohup命令中。
nohup java -cp "/usr/lib/hadoop/client-0.20/*:Test.jar" Test & 发布于 2015-11-11 22:09:15
考虑到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.,则该方法将有效。
这个机制在JavaDocs for java.net.URL中有更详细的描述。
替代修复被记录在HortonWorks论坛上。
https://stackoverflow.com/questions/33660438
复制相似问题