我正在使用 AWS EMR 运行 map 缩减作业。我的输入集包含 100 万个文件,每个文件大约 15KB。由于输入文件非常小,因此这将导致大量的映射器。因此,我将 s3 block 大小更改为 20KB 并使用了 5 个 r3.2xlarge 实例,但运行的并发任务数量仍然只有 30 个。在减小块大小之后,甚至在减小块大小之后,作业现在不应该运行更多数量的并发映射器吗,每个映射器占用的内存仍然相同吗?
如何限制每个映射器的内存使用量或增加并发映射器任务的数量?当前预计完成时间为 100 小时,将这些文件合并为较少数量的较大文件(例如 400MB 文件)是否会增加处理时间?
最佳答案
减少 block 大小可以增加特定作业所需的映射器数量,但不会增加集群在给定点可以运行的映射器的并行数量,也不会增加这些映射器使用的内存。
used 5 r3.2xlarge instances but number of concurrent tasks running is still just 30
要查找 Hadoop 2 EMR 集群可以支持的并行映射/Reducer,请参阅这篇文章 AWS EMR Parallel Mappers?
例如:r3.2xlarge * 5 个核心:
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 个映射器,而其他映射器将简单地排队。
如果您想要更多并行映射器,您可能需要为映射器配置更少的内存(基于该数学)和更少的堆。
关于java - MapReduce:增加并发映射器任务的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575872/