【问题标题】:How to give proper input and output format and filepath in Hadoop Streaming如何在 Hadoop Streaming 中提供正确的输入和输出格式以及文件路径
【发布时间】:2014-01-22 11:20:00
【问题描述】:

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

#!/bin/bash
/usr/bin/octave <<EOF
rgbImage = imread("/usr/2003vre.jpg");
imwrite(rgbImage,"/usr/OT/newnewnew.jpg");

这里我提到的文件路径是在本地文件系统中。请告诉我应该如何在这个脚本中给出 HDFS 的输入文件路径。

请告诉我,我应该在哪里为这个 octave 程序(在脚本或 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

对不对(输入输出的格式)

提前谢谢...

【问题讨论】:

  • “但它不会工作”......它有什么问题
  • 所以格式是对的,不是吗?

标签: matlab shell hadoop octave hadoop-streaming


【解决方案1】:

请记住,Hadoop 流式 mapreduce 框架使用键值对在标准输入/标准输出中工作。因此,要让映射器获取输入,它必须从标准输入读取并将键值对写入标准输出。

我认为在 octave 中没有办法从标准输入读取图像并将图像写入标准输出。 IE。你不能这样做:

 rgbImage = imread("STDIN") 

 imwrite(rgbImage, "STDOUT")

您也不能在 HDFS 中为 octave 文件操作提供文件路径。如果您有自己的 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"

制作你的 reducer 身份。

您的输出(在 HDFS 中)将只有一个名为 part-0000 的文件。该文件的格式为:

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

现在你知道了,使用这个文件你可以通过一些编码生成图像。

对于 hadoop 流命令的输入和输出,将所有图像文件放在 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

【讨论】:

  • 谢谢桑迪普·库马尔先生。我会解决的。但问题是我将在 Matlab 中实现这一点。因为我的输入文件格式是 HDF,所以我已经将所有 hdf 文件存储在 HDFS 中。所以请告诉我我可以在matlab中使用这个代码吗?这在matlab中有效吗?
  • 我已经检查过先生。但我收到错误(作业失败)。我照你说的做了。你能帮我做这件事吗?只是我需要从 HDFS 读取和写入图像。 (mapper.sh) 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多