从Map Reduce调用系统命令

时间:2012-07-19 16:19:38

标签: linux hadoop command mapreduce

我想从我的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. 为什么我发出此命令的环境实际上并没有运行命令?

  3. 我也注意到了其他命令。

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

1 个答案:

答案 0 :(得分:0)

一些意见:

  1. hadoop dfs -mv假定源和目标的文件系统是hdfs,除非你在参数中给出了schemata(例如,file:///user/test/somefile1)。
  2. 如果你是在Hadoop工具或Job.configure中运行这个命令,比如说,为什么要生成一个单独的进程(你的退出代码似乎忽略了,因此没有错误),你可以在Java中原生地调用它srcPath.getFileSystem( cfg ).rename( srcPath, dstPath )