0

我希望每个 hadoop 映射器在 M/R 作业中处理单独的数据部分,并且我想在伪分布式(单节点)设置上测试由于一个结果而需要存在许多映射器的情况更大的输入数据大小。鉴于我当前输入的大小和我正在试验的独立模式,我只能看到 1 个地图任务。

我的输入来自一个 hbase 表,我认为每个 hbase 表的区域数等于用于处理表数据的映射器数。

因此,为了重现许多映射器会处理输入数据的情况,我通过 shell 预定义了表的区域,如下所示:

创建 't1', 'f1', {NUMREGIONS => 4, SPLITALGO => 'HexStringSplit'}

或将“UniformSplit”设置为 SPLITALGO,但即使映射器确实增加到指定数量的区域(在将数据导入相应表之后),所有输入数据(在我尝试从该表中读取的后续测试作业中)通过仅通过一个映射器 - 其他映射器不处理任何输入行。

我在一个伪分布式(单节点)设置上工作,我真的不知道如何解决这个问题。有没有人有任何想法?谢谢!

4

1 回答 1

0

您是扫描整个表格还是只扫描其中的一部分?如果您正在扫描表的一部分,那么这可能是您的问题的原因,因为您的数据源不足以触发多个映射器。

您可以尝试在 hbase-size.xml 配置中减小区域大小并重新启动 hbase 以达到预期的效果。

最后,在您的 mapred-site.xml 配置中,您有多少个映射器插槽?如果它只是 1,这不会限制 map 作业的数量,但会限制可以在该服务器上一次运行的 map 作业的数量。

除此之外,我认为您对指定每个作业的映射器数量没有太多控制权 - 不像您对减速器数量所做的那样。

于 2012-07-16T21:41:25.273 回答