我使用不同数量的映射器和缩减器多次在1.1GB文件上运行Hadoop MapReduce(例如1个映射器和1个减速器,1个映射器和2个减速器,1个映射器和4个减速器,......)
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 |
+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
1-8个reducer和1-8个映射器的结果:column = mappers row的数量=减少器的数量
+---------+---------+---------+---------+---------+
| | 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 |
+---------+---------+---------+---------+---------+
Run Code Online (Sandbox Code Playgroud)
(1)当我有8个映射器时,看起来程序运行得稍微快一点,但为什么它会随着我增加减速器的数量而减慢?(例如8mappers/2reducers比8mappers/8reducers更快)
(2)当我只使用4个映射器时,它有点慢,因为我没有使用其他4个核心,对吧?
Nie*_*jes 16
最佳的映射器和缩减器数量与很多东西有关.
目标主要在于使用的CPU功率,传输的数据量(在映射器中,映射器和减速器之间,以及减速器之外)和磁盘"磁头运动"之间的平衡.
mapreduce作业中的每个任务如果能够以最小的磁头移动读取/写入数据,则效果最佳.通常被描述为"顺序读/写".但是,如果任务受CPU限制,则额外的磁头移动不会影响作业.
在我看来,在这种具体情况下,你有
处理这种情况的可能方法:
首先要做的就是:做一些测试运行,看看哪个设置在这个特定的工作和你的特定集群中表现最佳.
那你有三个选择:
转移负载的建议:
如果CPU绑定且所有CPU都已满载,则减少CPU负载:
如果IO绑定并且您还有一些CPU容量:
| 归档时间: |
|
| 查看次数: |
14009 次 |
| 最近记录: |