使用 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 进程?