关于java:MapReduce:增加并发映射器任务的数量

MapReduce: Increase number of concurrent mapper tasks

我正在使用AWS EMR运行地图缩小作业。我的输入集包含1百万个文件,每个文件约15KB。由于输入文件非常小,因此这将导致大量的映射器。因此,我将s3块大小更改为20KB,并使用了5个r3.2xlarge实例,但运行的并发任务数仍然仅为30。在减小块大小后,甚至在减小块大小后,作业现在是否不应运行更多的并发映射器数,每个映射器占用的内存是否仍然相同?

如何限制每个映射器的内存使用量或增加并发映射器任务的数量?当前的预期完成时间为100小时,将这些文件合并为数量较少的较大文件(例如400MB文件)会增加处理时间吗?


减小块大小可以增加特定作业所需的映射器数量,但不会增加群集可以在给定点运行的并行映射器数量,也不会增加这些映射器使用的内存。

used 5 r3.2xlarge instances but number of concurrent tasks running is
still just 30

要查找Hadoop 2 EMR集群可支持的并行映射/约简,请参阅本文AWS EMR并行映射器?

例如:r3.2xlarge * 5核:

1
2
3
mapreduce.map.memory.mb 3392    3392
yarn.scheduler.maximum-allocation-mb    54272
yarn.nodemanager.resource.memory-mb     54272

一旦核心节点可以具有54272/3392 = 16个映射器。

因此,一个群集可以总共具有16 * 5 = 80个并行的映射器。

因此,如果您的工作像1000个映射器一样旋转,集群可以启动80个具有预先配置的内存的映射器,并在您的节点上堆放,其他映射器将简单地排队。

如果您想要更多的并行映射器,则可能需要配置更少的内存(基于该数学运算)和更少的映射器堆。


您正在寻找的是CombineFileInputFormat。

请记住默认情况下的地图缝隙大小=默认情况下的HDFS块大小。更改一个不会影响另一个。

请点击以下链接:http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/