【问题标题】:unable to execute hadoop fs -put command from Java无法从 Java 执行 hadoop fs -put 命令
【发布时间】:2014-10-27 00:38:48
【问题描述】:

我正在尝试从 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 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 hadoop


    【解决方案1】:

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

    但是既然你在 Java 中,你到底为什么要在一个外部进程中做一个 haddop fs -put Java API 比 shell 更友好?

    【讨论】:

    • 您能否提供一个示例,说明如何使用 Java API 执行复制?抱歉,我对 hadoop 有点陌生,因此不知道该怎么做。我需要从maven 获得什么 api?
    • 我该如何设置HADOOP_HOME
    • @JasonDonnald 我提供的“Java API”链接应该足以让您入门。 maven 只能给你依赖,而不是 API。至于HADOOP_HOME 变量(如果你真的想坚持这种方法),这应该是一个有用的资源:@​​987654322@
    • 我尝试使用 Java API,但当我执行我的 .jar 文件时,我收到java.io.IOException: Mkdirs failed to create /user/tmpe 的错误。上面的帖子中提到了jar中的Java代码以及详细的错误描述
    • 我遇到了同样的问题?你是怎么解决的?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多