【发布时间】:2017-04-26 10:51:01
【问题描述】:
假设 hadoop 系统中的一个节点有 8GB 内存可用。
如果task tracker和data节点消耗2GB,如果每个task需要的内存是200MB,那么可以启动多少个map和reduce?
8-2 = 6GB
所以,6144MB/200MB = 30.72
因此,总共将启动 30 个 map 和 reduce 任务。
我是对的还是我错过了什么?
【问题讨论】:
假设 hadoop 系统中的一个节点有 8GB 内存可用。
如果task tracker和data节点消耗2GB,如果每个task需要的内存是200MB,那么可以启动多少个map和reduce?
8-2 = 6GB
所以,6144MB/200MB = 30.72
因此,总共将启动 30 个 map 和 reduce 任务。
我是对的还是我错过了什么?
【问题讨论】:
mapper 和 reducer 的数量不是由可用资源决定的。您必须通过调用setNumReduceTasks() 在代码中设置减速器的数量。
对于映射器的数量,它更复杂,因为它们是由 Hadoop 设置的。默认情况下,每个输入拆分大约有一个地图任务。您可以通过更改默认块大小、记录读取器、输入文件数来调整它。
您还应该在 hadoop 配置文件中设置同时运行的 map 任务和 reduce 任务的最大数量,以及分配给每个任务的内存。最后两个配置是基于可用资源的配置。请记住,map 和 reduce 任务在您的 CPU 上运行,因此您实际上受到可用内核数量的限制(一个内核不能同时运行两个任务)。
This guide 可以帮助您了解更多详情。
【讨论】:
并发任务的数量不仅仅取决于节点上可用的内存。这也取决于内核的数量。如果您的节点有 8 个 vcore,并且您的每个任务需要 1 个核心,那么一次只能运行 8 个任务。
【讨论】: