如何在hadoop流媒体中给出正确的输入输出格式和文件路径

o2g1uqev  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(276)

我已经创建了一个matlab程序,我必须在hadoop中运行它。为了测试的目的,我使用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");

这里我提到的文件路径是在本地文件系统中。请告诉我如何在这个脚本中给出hdfs的输入文件路径。
请告诉我,我应该在哪里输入这个八度音阶程序(在脚本或hadoop流输入阶段中),如下所示

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/OT/2003vre.jpg -output /usr/OT/output

对不对(输入输出格式)
提前谢谢。。。

xtupzzrd

xtupzzrd1#

请记住,hadoop streaming mapreduce框架在带有键值对的stdin/stdout中工作。因此,为了让Map程序获得输入,它必须从stdin中读取并向stdout写入一个或多个键值对。
我认为在八度音阶中,无法从标准输入中读取图像,也无法将图像写入标准输出。i、 e.你不能做:

rgbImage = imread("STDIN")

或者

imwrite(rgbImage, "STDOUT")

此外,您不能在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"

让你的身份。
您的输出(在hdfs中)将只有一个命名为part-0000的文件。此文件的格式为:

filename1    Content of Image 1
filename2    Content of Image 2
...

现在你知道了,使用这个文件你可以通过一些编码来生成图像。
对于hadoopstreaming命令的输入和输出,请将所有图像文件放在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

相关问题