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/