自定义二进制输入 - Hadoop

时间:2012-02-27 12:55:22

标签: java hadoop mapreduce

我正在Hadoop中开发一个演示应用程序,我输入的是.mrc图像文件。我想将它们加载到hadoop并对它们进行一些图像处理。

这些二进制文件包含一个带有元数据的大标题,后跟一组图像的数据。关于如何读取图像的信息也包含在标题中(例如,number_of_images,number_of_pixels_x,number_of_pixels_y,bytes_per_pixel,因此在标题字节之后,第一个[number_of_pixels_x*number_of_pixels_y*bytes_per_pixel]是第一个图像,然后是第二个,依此类推]

这些文件的输入格式是什么?我想到了两种可能的解决方案:

  1. 通过将元数据放在序列文件头中并将每个图像配对,将它们转换为序列文件。在这种情况下,我可以从所有映射器访问元数据吗?
  2. 编写自定义的InputFormat和RecordReader,并为每个图像创建拆分,同时将元数据放在分布式缓存中。
  3. 我是Hadoop的新手,所以我可能会遗漏一些东西。您认为哪种方法更好?是我遗失的任何其他方式?

1 个答案:

答案 0 :(得分:0)

在不知道您的文件格式的情况下,第一个选项似乎是更好的选择。使用序列文件,您可以利用许多与SequenceFile相关的工具来获得更好的性能。但是,这种方法对我有两件事情。

  1. 您如何将.mrc文件转换为.seq格式?
  2. 您提到标头很大,这可能会降低SequenceFiles的性能
  3. 但即使考虑到这些问题,我认为在SequenceFile中表示您的数据是最好的选择。