我使用不同数量的映射器和缩减器(例如 1 个映射器和 1 个缩减器、1 个映射器和 2 个缩减器、1 个映射器和 4 个缩减器,...)在 1.1GB 文件上多次运行 Hadoop MapReduce
Hadoop安装在具有超线程的四核机器上。
以下是按最短执行时间排序的前 5 个结果:
+----------+----------+----------+
| time | # of map | # of red |
+----------+----------+----------+
| 7m 50s | 8 | 2 |
| 8m 13s | 8 | 4 |
| 8m 16s | 8 | 8 |
| 8m 28s | 4 | 8 |
| 8m 37s | 4 | 4 |
+----------+----------+----------+
Edit
1 - 8 个减速器和 1 - 8 个映射器的结果:
列 = 映射器数量
行 = 减速器数量
+---------+---------+---------+---------+---------+
| | 1 | 2 | 4 | 8 |
+---------+---------+---------+---------+---------+
| 1 | 16:23 | 13:17 | 11:27 | 10:19 |
+---------+---------+---------+---------+---------+
| 2 | 13:56 | 10:24 | 08:41 | 07:52 |
+---------+---------+---------+---------+---------+
| 4 | 14:12 | 10:21 | 08:37 | 08:13 |
+---------+---------+---------+---------+---------+
| 8 | 14:09 | 09:46 | 08:28 | 08:16 |
+---------+---------+---------+---------+---------+
(1)
当我有 8 个映射器时,看起来程序运行得稍微快一些,但是为什么当我增加减速器数量时它会变慢? (例如 8mappers/2reducers 比 8mappers/8reducers 快)
(2)
当我只使用 4 个映射器时,速度会慢一些,因为我没有使用其他 4 个核心,对吧?
映射器和减速器的最佳数量与很多因素有关。
主要目标是使用的 CPU 功率、传输的数据量(在映射器中、映射器和减速器之间以及减速器之间)和磁盘“磁头移动”之间的平衡。
如果 MapReduce 作业中的每个任务都可以“以最少的磁盘头移动”读取/写入数据,那么它的工作效果最佳。通常描述为“顺序读/写”。但如果任务受 CPU 限制,则额外的磁盘头移动不会影响作业。
在我看来,在这个具体情况下你有
- 一个执行大量 CPU 周期的映射器(即,更多映射器使其运行速度更快,因为 CPU 是瓶颈,而磁盘可以跟上提供输入数据的速度)。
- 一个几乎不执行 CPU 周期并且主要受 IO 限制的减速器。这会导致使用单个减速器时,您仍然受 CPU 限制,但使用 4 个或更多减速器时,您似乎会受到 IO 限制。因此 4 个减速器会导致磁盘头移动“太多”。
处理这种情况的可能方法:
首先,按照您所做的操作:进行一些测试运行,看看在给定此特定作业和您的特定集群的情况下哪种设置效果最佳。
然后你有三个选择:
- 接受你所面临的情况
- 将负载从 CPU 转移到磁盘,或者反之亦然。
- 获得更大的集群:更多的 CPU 和/或更多的磁盘。
转移负载的建议:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)