2010-06-10 127 views
2

通常在输入文件中能够部分读取和处理Mapper功能(如在文本文件中)。是否有任何事情可以处理二进制文件(比如说图像,序列化对象),这些文件需要所有块在同一主机上,然后才能开始处理。Hadoop:映射二进制文件

+1

你有点儿问这个问题。我在上一个问题中发布的答案在某种程度上解决了这个问题:http://stackoverflow.com/questions/3012121/hadoop-processing-large-serialized-objects – 2010-06-15 14:51:44

回答

3

将您的图像粘贴到SequenceFile中;那么你将能够使用map-reduce迭代地处理它们。

不太明显:Hadoop本身并不知道任何有关文本和非文本的内容。它只有一个知道如何打开输入流的类(hdfs将不同节点上的块一起处理,以使它们显示为一个大文件)。最重要的是,您有一个Reader和一个InputFormat,它知道如何确定该流在哪里记录开始,结束的位置以及如何在文件中间的某处放弃下一个记录的开头。 TextInputFormat只是一个实现,它将换行符视为记录分隔符。还有一种称为SequenceFile的特殊格式,您可以将任意二进制记录写入,然后让它们退出。使用它。

+0

现在可能希望将Avro类型转换为SequenceFile – rICh 2012-12-19 15:11:47