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