从runtime.getruntime().exec运行hadoop命令

z2acfund  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(241)

我将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,但似乎都不起作用。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题