如果我有1000行的数据文件..。我在我的map方法中为我的单词计数程序使用了map。因此,数据文件中的每一行都将被视为一个split。
RecordReader将把每一行(or split)作为(Key, Value)对提供给map()方法。
根据我的理解..。对于每一行或每条记录,应该执行1000次map()方法。
意味着有多少Mappers会运行??抱歉弄糊涂了..。map()方法只是映射器的一个实例。那么,每个Mapper任务有多少个映射实例是根据什么?决定的。
注意:当我对1000行数据执行WordCount MapReduce程序时。我看到Mappers的数量为2.所以每个map tasks???运行500个map实例
如果我问错了,请纠正我的问题。
发布于 2015-06-07 03:47:35
映射器如何分配
映射器的数量由映射/减少作业中使用的InputFormat确定的分割数决定。在典型的InputFormat中,它与文件数量和文件大小成正比。
假设您的HDFS块配置配置为64 on (默认大小),并且您有一个大小为100 on的文件,那么它将占用2个块,然后根据这些块分配2个映射程序。
假设您有2个大小为30 if的文件(每个文件),那么每个文件将占用一个块,而mapper将在此基础上得到分配。
假设您有一个60 job的文件,那么它将占用1个块,但是如果您在代码中指定了输入拆分大小,假设拆分大小为30 job,那么将为该任务分配2个映射器。
RecordReader()-记录读取器将数据分解为键/值对,以便输入到Mapper.It接受参数:
拆分-定义要读取的记录范围的拆分。
InputSplt()-获取拆分的大小,以便可以按大小对输入拆分进行排序。
如果您没有指定任何InputSplit大小,那么它将将整个块作为一个拆分,并将读取数据并为Mapper生成密钥、值对。
在您的示例中,分配了2 Mapper。它指示您已经指定了InputSplit大小,或者您的数据驻留在两个块中。
这个链接可以帮助理解记录读取器和输入分割。
发布于 2015-06-07 03:13:53
首先,它取决于hdfs块的大小。
映射器的数量不同,程序调用wrt的次数不同,maper代码运行的次数也不同。
在代码的情况下,单个映射实例将运行与行数相同的次数,因为输入格式是文本输入format.But,映射器的数量将完全取决于块大小。
https://stackoverflow.com/questions/30689327
复制相似问题