1
我试图从Java代码执行hadoop fs -put <source> <destination>
。当我直接从终端执行此命令,它工作正常,但是当我试图从Java代码中执行此命令使用无法执行来自Java的hadoop fs -put命令
String[] str = {"/usr/bin/hadoop","fs -put", source, dest};
Runtime.getRuntime().exec(str);
我得到错误的Error: Could not find or load main class fs
。我试图执行一些非Hadoop命令,如来自Java的ls,mkdir命令,它们工作正常,但hadoop命令没有得到执行,即使它们在终端上工作正常。
这可能是什么原因造成的?我该如何解决?
JAVA API TRY:我试图使用java api来执行复制操作,但我得到错误。 Java代码是:
String source = "/home/tmpe/file1.csv";
String dest = "/user/tmpe/file1.csv";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://node1:8020");
FileSystem fs = FileSystem.get(conf);
Path targetPath = new Path(dest);
Path sourcePath = new Path(source);
fs.copyFromLocalFile(false,true,sourcePath,targetPath);
这是我得到的错误是:
Exception in thread "main" java.io.IOException: Mkdirs failed to create /user/tmpe
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:378)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:364)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:564)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:545)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:452)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:229)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1230)
我已经创建/user/tmpe
文件夹,它有完整的读写权限,但仍这个错误出现。我无法解决问题
您能否提供一个我如何使用Java API执行复制的例子?抱歉,我对hadoop有点新,因此我不确定如何去做。我需要从'maven'中获得什么API? – 2014-10-27 01:08:46
以及如何设置'HADOOP_HOME'? – 2014-10-27 01:12:47
@JasonDonnald我提供的“Java API”链接应该足以让你开始。 'maven'只能给你依赖,而不是API。至于'HADOOP_HOME'变量(如果你真的想坚持这种方法),这应该是一个有用的资源:http://stackoverflow.com/questions/580085/is-it-possible-to-set-an-运行环境变量从java – 2014-10-27 01:19:04