无法从Java执行hadoop fs -put命令

时间:2014-10-27 00:38:48

标签: java hadoop

我正在尝试从Java代码执行hadoop fs -put <source> <destination>。当我直接从终端执行此命令时,它工作正常,但当我尝试使用

从Java代码中执行此命令时
String[] str = {"/usr/bin/hadoop","fs -put", source, dest};
Runtime.getRuntime().exec(str);

我收到Error: Could not find or load main class fs错误。我尝试从Java执行一些非hadoop命令,如ls,mkdir命令,并且它们工作正常但是hadoop命令没有被执行,即使它们在终端上工作正常。

可能的原因是什么?如何解决?

JAVA API尝试:我尝试使用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文件夹,它具有完整的读写权限,但仍会出现此错误。我无法解决问题

2 个答案:

答案 0 :(得分:1)

我猜你可能没有设置HADOOP_HOME环境变量。

但是既然你是Java,那么当Java API比shell更友好时,为什么你想在外部进程中做haddop fs -put

答案 1 :(得分:0)

可以在旧帖子中找到,但如果您还没有尝试过,请使用hadoop jar app_name.jar而不是java -jar来执行。这样,如果罐子的类路径没有所有hadoop罐子,它将获取$HADOOP_CLASSPATH中预定义的罐子。