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