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

标签 java hadoop mapreduce jvm amazon-emr

我正在使用 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/

相关文章:

java - Hadoop 截断/不一致的计数器名称

Hadoop/Pig 正则表达式匹配

java - 将 jlist 中选定的元素放入字符串列表中

java - 使用 EventBus 时处理 Vert.x NetSocket writeQueueFull

scala - Hadoop 作业在 java.lang.ClassNotFoundException 上失败

hadoop - datanode在hdfs下没有 "namenode"目录

hadoop - Hadoop/MapReduce中的日志文件分析

hadoop - yarn 组件

java - 如何在 Play 框架中的 Action 中获取调用的 Action 的响应

java - JAVA中SQL语句的where子句中使用变量