首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inplutsplit、RecordReader & Mapper和Mapper之间的数据流

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

Stack Overflow用户
提问于 2015-06-07 01:55:34
回答 2查看 333关注 0票数 1

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

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

根据我的理解..。对于每一行或每条记录,应该执行1000次map()方法。

意味着有多少Mappers会运行??抱歉弄糊涂了..。map()方法只是映射器的一个实例。那么,每个Mapper任务有多少个映射实例是根据什么?决定的。

注意:当我对1000行数据执行WordCount MapReduce程序时。我看到Mappers的数量为2.所以每个map tasks???运行500个map实例

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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大小,或者您的数据驻留在两个块中。

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

票数 0
EN

Stack Overflow用户

发布于 2015-06-07 03:13:53

首先,它取决于hdfs块的大小。

映射器的数量不同,程序调用wrt的次数不同,maper代码运行的次数也不同。

在代码的情况下,单个映射实例将运行与行数相同的次数,因为输入格式是文本输入format.But,映射器的数量将完全取决于块大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30689327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档