0

hadoop 和 mapreduce 的新用户,我想创建一个 mapreduce 作业来对图像进行一些测量。这就是为什么我想知道我是否可以将图像作为输入传递给 mapreduce?如果可以?任何类型的例子

谢谢

4

2 回答 2

0

No.. you cannot pass an image directly to a MapReduce job as it uses specific types of datatypes optimized for network serialization. I am not an image processing expert but I would recommend to have a look at HIPI framework. It allows image processing on top of MapReduce framework in a convenient manner.

Or if you really want to do it the native Hadoop way, you could do this by first converting the image file into a Hadoop Sequence file and then using the SequenceFileInputFormat to process the file.

于 2013-05-03T22:44:11.193 回答
0

是的,你完全可以做到这一点。

由于提供的信息有限,我只能给你一个非常笼统的答案。

无论哪种方式,您都需要: 1) 您需要编写一个自定义 InputFormat,而不是在 HDFS 位置获取大量文件(如 TextInputFormat 和 SequenceFileInputFormat 所做的),它实际上将图像的 HDFS 路径名传递给每个映射任务。从中读取图像不会太难。

如果您计划有一个通过框架传递图像的 Reduce 阶段,您需要:2)您需要创建一个实现 Writable 的“ImageWritable”类(如果您正在键入图像,则为 WritableComparable )。在您的 write() 方法中,您需要将图像序列化为字节数组。当你这样做时,我要做的是首先向输出写入一个 int/long,它是你要写入的数组的大小。最后,您需要将数组写入字节。

在您的 read() 方法中,您将首先读取一个 int/long(它将描述图像的有效负载),创建一个此大小的字节数组,然后将字节完全读入您的字节数组,最长为您捕获的 int/long。

我不完全确定你在做什么,但这就是我的做法。

于 2013-05-03T23:53:09.743 回答