0

我想从我的 map reduce 程序中调用一个系统命令。我希望这个命令只运行一次,但似乎该命令无法识别。我的测试命令是: hadoop dfs -mv /user/test/somefile1 /user/test/somefile2

我正在使用以下命令发出命令:

String envp[] = new String[1];
envp[0] = "Path=" + System.getProperty("java.library.path");
Process p = Runtime.getRuntime().exec("hadoop fs -mv /user/test/somefile1 /user/test/somefile2", envp);

我有两个问题,

  1. 放置此代码以便它只执行一次的最佳位置在哪里?

  2. 为什么我发出此命令的环境实际上并未运行该命令?

我在其他命令中也注意到了这一点。

当我发出 hadoop 命令时,我没有收到错误,但没有发生移动。如果我从 linux 命令行运行相同的命令,它确实有效。

4

1 回答 1

0

一些评论:

  1. hadoop dfs -mv假定源和目标的文件系统是 hdfs,除非您在参数中提供模式(例如,file:///user/test/somefile1)。
  2. 例如,如果您在 Hadoop 工具或 Job.configure 中运行此命令,那么当您可以在 Java 中本地调用它时,为什么要生成一个单独的进程(您似乎忽略了它的退出代码,因此没有错误)srcPath.getFileSystem( cfg ).rename( srcPath, dstPath )
于 2012-07-19T18:49:21.523 回答