从Runtime.getRuntime()。exec运行hadoop命令

时间:2015-09-28 17:04:00

标签: java hadoop command runtime.exec

我正在使用Java8和CDH5。

我正在尝试运行 hadoop fs -copyFromLocal 命令将从每个maptask / reducetask捕获的Java Flight Recorder文件复制到HDFS。我在premain方法的关闭钩子中执行此副本。

我不能使用Java API与HDFS交互,因为我想通过在JVM被杀死后运行的shell脚本来运行它。

我写了一个运行 hadoop 命令的脚本。最后,我想在 nohup 模式下运行 hadoop 命令,以确保它在JVM退出后仍然运行。

Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", "./copyFromLocal.sh"});

copyFromLocal.sh:

#!/bin/sh

/usr/bin/hadoop fs -copyFromLocal /localdir/*.jfr /hdfsdir

我试图直接以这种方式运行 hadoop 命令,但不起作用:

Runtime.getRuntime().exec(new String[]{"/usr/bin/hadoop", "fs -copyFromLocal /localdir/*.jfr /hdfsdir"});

Runtime.getRuntime().exec(new String[]{"hadoop", "fs -copyFromLocal /localdir/*.jfr /hdfsdir"});

我尝试运行其他 hadoop fs 命令,例如 -mkdir -ls ,但它们似乎都不起作用。

0 个答案:

没有答案