使用图像作为输入创建mapreduce作业

时间:2013-05-03 22:33:26

标签: image-processing hadoop mapreduce

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

感谢

2 个答案:

答案 0 :(得分:0)

否..您无法将图像直接传递给MapReduce作业,因为它使用针对网络序列化优化的特定类型的数据类型。我不是图像处理专家,但我建议你看一下HIPI框架。它允许以方便的方式在MapReduce框架之上进行图像处理。

或者如果您真的想以原生Hadoop方式实现,可以先将图像文件转换为Hadoop Sequence file,然后使用SequenceFileInputFormat处理文件。

答案 1 :(得分:0)

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

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

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

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

在read()方法中,你将首先读取一个int / long(它将描述图像的有效负载),创建一个这个大小的字节数组,然后将字节完整地读入你的字节数组中,直到你捕获的int / long的长度。

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