Inplutsplit、RecordReader & Map instace 和 Mapper 之间的数据流



如果我有一个1000行的数据文件…我在我的map方法中使用TextInputFormat用于我的单词计数程序。因此,数据文件中的每一行都将被视为一个split

一个RecordReader将把每一行(or split)作为(Key, Value)对提供给map()方法。

根据我的理解…每行或每条记录执行1000次map()方法。

意味着有多少Mappers将运行??对不起,我搞糊涂了。map()方法只是mapper的一个实例。那么每个Mapper任务有多少个地图实例是基于什么来决定的??

注意:当我执行WordCount MapReduce程序1000行数据…我看到Mappers的数量为2。因此,每个map tasks???运行500个map实例

如果我问错了,请纠正我的问题

映射器如何分配

映射器的数量由Map/Reduce作业中使用的InputFormat决定的分割数量决定。在典型的InputFormat中,它与文件数量和文件大小成正比。

假设您的HDFS块配置配置为64MB(默认大小),并且您有一个大小为100MB的文件,那么它将占用2个块,然后根据块分配2个映射器

假设你有两个30MB大小的文件(每个文件),那么每个文件将占用一个块,映射器将基于此分配。

假设你有一个60MB的文件,那么它将占用1块,但如果你在代码中指定了输入分割大小,假设分割大小为30MB,那么将为该作业分配2个映射器。

RecordReader() -记录读取器将数据分解成键/值对输入到Mapper。它接受以下参数:

split -定义读取记录范围的分割。

InputSplt() -获取分割的大小,以便输入分割可以按大小排序。

如果您没有指定任何InputSplit大小,那么它将把整个块作为一个分割,并将读取数据并为Mapper生成键,值对。

在你的情况下2 Mapper被分配。它表示您已经指定了InputSplit大小或您的数据驻留在2块中。

这个链接可以帮助您理解记录读取器和输入分割。

首先它取决于hdfs块的大小。
程序调用映射器的数量和映射器代码运行的次数是不同的。

如果输入格式是textinput格式,则单个mapper实例将运行与代码行数相同的次数。但是运行映射器的数量完全取决于块大小。

相关内容

  • 没有找到相关文章

最新更新