我正在使用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 ,但它们似乎都不起作用。