Matlab 如何在Hadoop流媒体中提供正确的输入输出格式和文件路径

Matlab 如何在Hadoop流媒体中提供正确的输入输出格式和文件路径,matlab,shell,hadoop,octave,hadoop-streaming,Matlab,Shell,Hadoop,Octave,Hadoop Streaming,我已经创建了一个Matlab程序,我必须在Hadoop中运行它。出于测试目的,我使用Octave进行Hadoop图像处理。我在Hadoop环境中使用集群。对于图像处理,我使用Hadoop流jar文件。为倍频程简单图像处理程序创建的Shell脚本。在shell脚本中使用了本地文件系统映像文件,这是成功的。但现在我要在Hadoop环境中运行它。为此,我应该给出存储在HDFS中的图像。我在Hadoop中尝试过这个,但它不起作用,也不会给出输出图像。比如说 #!/bin/bash /usr/bin/oc

我已经创建了一个Matlab程序,我必须在Hadoop中运行它。出于测试目的,我使用Octave进行Hadoop图像处理。我在Hadoop环境中使用集群。对于图像处理,我使用Hadoop流jar文件。为倍频程简单图像处理程序创建的Shell脚本。在shell脚本中使用了本地文件系统映像文件,这是成功的。但现在我要在Hadoop环境中运行它。为此,我应该给出存储在HDFS中的图像。我在Hadoop中尝试过这个,但它不起作用,也不会给出输出图像。比如说

#!/bin/bash
/usr/bin/octave <<EOF
rgbImage = imread("/usr/2003vre.jpg");
imwrite(rgbImage,"/usr/OT/newnewnew.jpg");
输入和输出的格式是否正确


提前感谢…

记住Hadoop streaming mapreduce框架在stdin/stdout中使用键值对工作。因此,为了让映射程序获得输入,它必须从stdin读取并向stdout写入一个或多个键值对

我认为在八度音阶中,无法从标准输入中读取图像并将图像写入标准输出。也就是说,你不能做:

 rgbImage = imread("STDIN") 

此外,您不能为倍频程文件操作提供HDFS中的文件路径。如果您有自己的imread和imwrite二进制文件,通过stdin和stdout处理数据,那么您的工作流将采用以下方式:

制图员

#!/bin/bash

mapInpFileName=${map_input_file}  # Get input file name from env.

img=`cat`
rbgImage=`imread < $img`
oupImage=`imwrite < $rbgImage`
printf "%s\t%s\n" "$mapInpFileName" "$oupImage"
现在您知道了,使用这个文件,您可以通过一些编码生成图像

对于hadoop streaming命令的输入和输出,请将所有图像文件放在HDFS的一个目录中,例如/usr/INP/。然后做:

hadoop@isro:/usr/local/grid/hadoop$ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar -mapper /usr/OT/octave.sh -file /usr/OT/octave.sh -input /usr/INP/ -output /usr/OT/output

但是它不起作用。。。它怎么了?格式是对的,不是吗?谢谢Sandeep Kumar先生。我会解决的。但问题是我要在Matlab中实现它。因为我的输入文件格式是HDF,所以我已经将所有HDF文件存储在HDFS中。所以请告诉我我可以在matlab中使用这段代码吗。这是在matlab中工作的。我已经检查过了,先生。但我的工作失败了。我照你说的做了。你能帮我做这个吗。只是我需要从HDFS读取和写入图像。mapper.sh文件?
#!/bin/bash

mapInpFileName=${map_input_file}  # Get input file name from env.

img=`cat`
rbgImage=`imread < $img`
oupImage=`imwrite < $rbgImage`
printf "%s\t%s\n" "$mapInpFileName" "$oupImage"
filename1    Content of Image 1
filename2    Content of Image 2
...
hadoop@isro:/usr/local/grid/hadoop$ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar -mapper /usr/OT/octave.sh -file /usr/OT/octave.sh -input /usr/INP/ -output /usr/OT/output