如何Hadoop Map Reduce整个文件

How to Hadoop Map Reduce entire file

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

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

我们有不同类型的输入格式,例如 TextInputFormat,它将文本文件作为输入,对于每个拆分,它提供行偏移量作为键,整行作为值提供给 Mapper 中的映射方法。其他输入格式也类似。

现在如果你有很多小文件,假设每个文件都小于块大小。然后每个文件将被提供给不同的映射器。如果文件大小超过块大小,那么它将被分成两个块并在两个块上执行。

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

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

假设您有 100 MB 的文件,并且您有 2 个这样的文件。

现在您的 100 MB 文件将被拆分为 64MB + 36MB,并且将启动 4 个映射器。