我将java8与cdh5结合使用。
我正在尝试运行hadoopfs-copyfromlocal命令将从每个maptask/reducetask捕获的java飞行记录器文件复制到hdfs。我在一个premain方法的shutdownhook中做这个拷贝。
我不能使用javaapi与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,但似乎都不起作用。
暂无答案!
目前还没有任何答案,快来回答吧!