Hadoop:将文件分组以进行映射

时间:2014-01-14 06:43:33

标签: java apache hadoop mapreduce

我正在通过Hadoop开发一个程序,这对我来说相对较新,所以我很感激有关为我计划做的构建概念的建议。

我有一个大的有序的1 ... n图像集。图像在逻辑上分为几组,每组可以独立处理。但是,在一个组内部,所有图像都是相关的,因此应由单个Map任务处理。图像本身很小,所以同时将它们加载到内存中应该没问题。

我想把每个组打包成一个单独的SequenceFile,但是似乎没有办法从InputStream中读取SequenceFile ......或者,也许,有一种方法可以以某种方式为单个MapReduce作业分配M个不同的节点以便每个节点直接从HDFS读取其SeqFile?

2 个答案:

答案 0 :(得分:0)

我通过使用base64将图像编码为字符串然后将它们全部放入预处理阶段的JSON对象的数组字段来解决类似的问题。

此外,如果您将JSON存储为AVRO格式,那么您的映射器中的对象将获得out-of-the-box object-oriented interface的好处。

答案 1 :(得分:0)

您可能需要查看CombineFileInputFormat,这可以帮助您根据PathFilter对输入进行分组,比如文件夹分组。并且每个组可以构造为单个Split,其将由单个地图任务处理。由于地图任务数量=分割数量。

您的需求似乎与this link相似。请检查。