使用 Java Runtime.exec() 在 Hadoop 上运行命令

Posted

技术标签:

【中文标题】使用 Java Runtime.exec() 在 Hadoop 上运行命令【英文标题】:Running commands on Hadoop using Java Runtime.exec() 【发布时间】:2012-11-06 00:06:54 【问题描述】:

有一个名为“cufflinks”的程序运行如下:

cufflinks -o <output-dir>  <input-file>

此程序将 1 个文件作为输入,并在“输出目录”中生成 4 个文件作为输出。

我正在尝试使用映射器类中的 Runtime.exec() 在 Hadoop 集群上运行相同的程序。我正在设置

output-dir=/some/path/on/HDFS

我期待这 4 个文件将在 HDFS 上生成为 o/p。但是,事实并非如此,HDFS 上的 o/p 目录不包含这 4 个文件中的任何一个。

然后我尝试设置

输出目录=/tmp/output/

它成功了。

谁能建议为什么它不能在 HDFS 上运行?我需要做什么才能使其在 HDFS 上运行?

谢谢。

【问题讨论】:

【参考方案1】:

问题是袖扣程序应该使用 HDFS API 内部在 HDFS 中创建文件,而不是常规文件操作。

【讨论】:

嗯,这就是问题所在。但是,我的印象是,一旦您在 Hadoop 上使用 Runtime.exec() 运行程序,Hadoop 框架会将 HDFS 视为常规文件系统,并将像在常规文件系统上一样在 HDFS 上创建文件。那么,没有办法吗? HDFS 是分布式文件系统,而 NTFS/FAT/EXT* 不是,每个系统都有不同的 API 与它们交互。

以上是关于使用 Java Runtime.exec() 在 Hadoop 上运行命令的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 的 Runtime.exec() 时如何添加超时值?

java.lang.Runtime.exec() Payload

使用 Runtime.exec 从 Java 应用程序启动 JVM 进程?

如何通过在 java 中使用 Runtime.exec() 运行 sqlplus 来捕获 sqlplus 窗口的输出

Java Runtime.exec()的使用

java Runtime.exec 异常