如何Hadoop Map减少整个文件

时间:2015-04-20 16:37:29

标签: hadoop mapreduce

我已经玩了各种streamin map reduce word count例子,其中Hadoop / Hbase似乎占用一个大文件并在节点之间平均分解(在换行符处)。然后它将部分文档的每一行提交到我的代码的地图部分。我的问题是,当我有很多非结构化和半结构化的文档时,如何让Hadoop将整个文档提交到我的地图代码?

1 个答案:

答案 0 :(得分:2)

文件拆分由InputFormat.getSplits计算。因此,对于每个输入文件,它获得分割数量,并且每个分割都被提交给映射器。现在基于InputFormat Mapper将处理输入分割。

我们考虑使用不同类型的输入格式,例如TextInputFormat,它将文本文件作为输入,对于每个分割,它提供行偏移作为键,整行作为值提供给Mapper中的map方法。与其他InputFormats类似。

现在,如果您有许多小文件,请说每个文件小于块大小。然后将每个文件提供给不同的映射器。如果文件大小超过块大小,则它将被分成两个块并在两个块上执行。

考虑一个示例,其中输入文件均为1MB,并且您有64个此类文件。还假设您的块大小为64MB。

现在,您将为每个文件启动64个映射器。

考虑你有100 MB的文件,你有2个这样的文件。

现在你的100 MB文件将分成64MB + 36MB,4个映射器将被启动。