Streaming 如何在hadoop流媒体中使用以文件名为参数的二进制可执行文件?

Streaming 如何在hadoop流媒体中使用以文件名为参数的二进制可执行文件?,streaming,hadoop,mapreduce,Streaming,Hadoop,Mapreduce,假设我有一个以文件名为参数的二进制可执行文件,比如“myprog file1 file2”,它从file1读取,然后写入file2。二进制可执行文件不接受stdin,也不发出stdout。如何在hadoop流媒体中使用此二进制可执行文件作为映射器或缩减器?谢谢 为了使用您的程序,您必须首先将数据保存为本地磁盘上的临时文件。然后可以从文件中读取结果 但是,这违背了使用Hadoop处理数据的目的。将数据复制到本地磁盘并将结果读回Hadoop land的开销会降低性能 我建议您对二进制可执行文件进行更

假设我有一个以文件名为参数的二进制可执行文件,比如“myprog file1 file2”,它从file1读取,然后写入file2。二进制可执行文件不接受stdin,也不发出stdout。如何在hadoop流媒体中使用此二进制可执行文件作为映射器或缩减器?谢谢

为了使用您的程序,您必须首先将数据保存为本地磁盘上的临时文件。然后可以从文件中读取结果

但是,这违背了使用Hadoop处理数据的目的。将数据复制到本地磁盘并将结果读回Hadoop land的开销会降低性能


我建议您对二进制可执行文件进行更改,以允许通过stdin和stdout进行I/o。

为了使用您的程序,您必须首先将数据保存为本地磁盘上的临时文件。然后可以从文件中读取结果

但是,这违背了使用Hadoop处理数据的目的。将数据复制到本地磁盘并将结果读回Hadoop land的开销会降低性能


我建议您对二进制可执行文件进行更改,以允许通过stdin和stdout进行I/o。

这是我现在使用的方法,正如您在回复中提到的,缺点是显而易见的。还有更优雅的方式吗?是否可以像文件一样包装stdin和stdout,而不是在磁盘上使用临时文件?我试过使用/dev/stdin和/dev/stdout,但它不起作用。二进制文件不是我自己制作的,我无法更改。这是我现在使用的方法,缺点很明显,正如您在回复中提到的。还有更优雅的方式吗?是否可以像文件一样包装stdin和stdout,而不是在磁盘上使用临时文件?我试过使用/dev/stdin和/dev/stdout,但它不起作用。二进制文件不是我自己制作的,我无法更改它。