gpt4 book ai didi

hadoop - Inputsplit、RecordReader & Map 实例和 Mapper 之间的数据流

转载 作者:可可西里 更新时间:2023-11-01 16:11:11 25 4
gpt4 key购买 nike

如果我有一个包含 1000 行的数据文件......并且我在我的字数统计程序的 map 方法中使用了 TextInputFormat。因此,数据文件中的每一行都将被视为一个拆分

RecordReader 会将每一行(或拆分)作为(Key, Value) 对提供给map() 方法。

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

表示将运行多少个 Mappers?抱歉,在这里混淆了。map() 方法只是 mapper 的一个实例,对吧。那么每个 Mapper 任务有多少个 map 实例是根据什么决定的???

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

运行的实例

如果我问错了请指正我的问题。

最佳答案

如何分配映射器

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

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

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

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

RecordReader() - 记录读取器将数据分解为键/值对以输入到映射器。它需要参数:

拆分 - 定义要读取的记录范围的拆分。

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

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

在您的情况下,分配了 2 个 Mapper。它表示您已指定 InputSplit 大小或您的数据驻留在 2 block 中。

link有助于理解记录阅读器和输入拆分。

关于hadoop - Inputsplit、RecordReader & Map 实例和 Mapper 之间的数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com