如何在单个映射器中处理文件

时间:2015-05-25 17:46:14

标签: hadoop mapreduce

我有3个文件,每个50 MB,并且想要在Blockize为256Mb的单个Mapper中处理。怎么做?我需要关注哪些属性?如果我将减速器的数量设置为5那么输出是什么?它将被存储在哪里?

1 个答案:

答案 0 :(得分:1)

您可以使用CombineFileInputFormat()将小文件合并为一个split,如果您愿意,可以在代码中指定maxSplitSize

如果指定了maxSplitSize,则组合同一节点上的块以形成单个拆分。剩余的块然后与同一机架中的其他块组合。如果未指定maxSplitSize,则来自同一机架的块将合并为一个分区;没有尝试创建节点本地分裂。如果maxSplitSize等于块大小,则此类与Hadoop中的默认拆分行为类似:每个块都是本地处理的拆分。

来源: http://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html

我们知道Mapper是根据blocks or input split的数量分配的。如果将文件合并为一个拆分,则会分配一个映射器来处理数据。

请参考以下实用链接。

http://www.idryman.org/blog/2013/09/22/process-small-files-on-hadoop-using-combinefileinputformat-1/

http://blog.yetitrails.com/2011/04/dealing-with-lots-of-small-files-in.html

http://hadooped.blogspot.in/2013/09/combinefileinputformat-in-java-mapreduce.html