2012-02-27 45 views
0

我正在Hadoop中开发一个演示应用程序,我的输入是.mrc图像文件。我想将它们加载到hadoop并对它们执行一些图像处理。自定义二进制输入 - 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并为每个图像创建split,同时pl在分布式缓存中使用元数据。

我是Hadoop的新手,所以我可能会错过一些东西。你认为哪种方法更好?是我缺少的其他方式吗?

回答

0

不知道你的文件格式,第一个选项似乎是更好的选择。使用序列文件可以利用很多SequenceFile相关工具来获得更好的性能。但是,这种方法有两件事使我感到担忧。

  1. 如何将.mrc文件转换为.seq格式?
  2. 你提到的头大,这可能会降低SequenceFiles

但即使有这些问题的表现,我认为在SequenceFile的代表你的数据是最好的选择。

+0

总是129KB。这太大了吗? – fgrollio 2012-02-29 10:28:06

+0

如果头部很小,那么你可能没问题。当你说大头时,我认为它的大小是几MB – 2012-02-29 12:57:45