java - 自定义二进制输入-Hadoop

标签 java hadoop mapreduce

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

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

这些文件的输入格式是什么?我认为有两种可能的解决方案:

  • 通过将元数据放在序列文件 header 中将它们转换为序列文件,并且每个图像都有对。在这种情况下,我可以从所有映射器访问元数据吗?
  • 编写自定义的InputFormat和RecordReader并为每个图像创建拆分,同时将元数据放入分布式缓存中。

  • 我是Hadoop的新手,所以我可能会缺少一些东西。您认为哪种方法更好?还有其他我想念的方式吗?

    最佳答案

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

  • 如何将.mrc文件转换为.seq格式?
  • 您提到 header 很大,这可能会降低SequenceFiles
  • 的性能

    但是,即使有这些顾虑,我认为用SequenceFile表示数据也是最好的选择。

    关于java - 自定义二进制输入-Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465373/

    相关文章:

    java - 如何使用 Apache PDFBox 将图像移动到 PDF 页面的顶部?

    java - 从 JCR 存储库访问资源数据

    Hadoop 独立 - hdfs 命令很慢

    循环中的java setText

    java - java中的LDAP搜索: DN contains ,

    sql - 为每个导致效率问题的键找到最小值

    hadoop - 挣扎于简单的 hadoop map reduce 代码任务

    hadoop守护进程没有启动

    mongodb - hadoop中的Analytics(分析)实现

    java - 在Hadoop中使用BlazingCache开源会降低性能