通常在输入文件中,Mapper功能可以部分读取和处理(如文本文件中所示)。有没有什么办法可以处理二进制文件(比如图像,序列化对象),这些二进制文件要求所有块都在同一主机上,然后才能开始处理。
答案 0 :(得分:3)
将图像粘贴到SequenceFile中;那么你将能够使用map-reduce迭代地处理它们。
有点不那么神秘:Hadoop本身并不了解有关文本和非文本的任何内容。它只有一个知道如何打开输入流的类(hdfs将不同节点上的块一起处理,使它们显示为一个大文件)。最重要的是,你有一个Reader和一个InputFormat,它知道如何确定流记录的起始位置,结束位置,以及如果你被放在文件中间的某个地方,如何找到下一条记录的开头。 TextInputFormat只是一个实现,它将换行视为记录分隔符。还有一种称为SequenceFile的特殊格式,您可以将任意二进制记录写入,然后将其取出。使用它。