Hadoop:映射器和还原器的数量



我在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     |
+----------+----------+----------+

编辑

1-8减速器和1-8映射器的结果:column=映射器数行=减速器数量

+---------+---------+---------+---------+---------+
|         |    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/2减速器比8mappers/8减速器快)

(2)当我只使用4个映射器时,速度会慢一点,因为我没有使用其他4个内核,对吧?

映射器和还原器的最佳数量与很多事情有关。

主要目标是在使用的CPU功率、传输的数据量(在映射器中,在映射器和减速器之间,以及在减速器之外)和磁盘"磁头移动"之间取得平衡。

如果mapreduce作业中的每项任务都能"以最小的磁盘头移动"读取/写入数据,则其效果最佳。通常被描述为"顺序读/写"。但是,如果任务是CPU绑定的,那么额外的磁盘头移动不会影响作业。

在我看来,在这种特定的情况下,你有

  • 一个完成相当多CPU周期的映射器(即,更多的映射器使它运行得更快,因为CPU是瓶颈,磁盘可以跟上提供输入数据的步伐)
  • 一种几乎不执行CPU周期并且主要受IO约束的减速器。这导致使用单个减速器时,您仍然受CPU约束,而使用4个或更多减速器时似乎受IO约束。因此,4个减速器会导致磁盘磁头移动过多

处理这种情况的可能方法:

首先做你所做的:做一些测试运行,看看在给定这个特定作业和你的特定集群的情况下,哪个设置表现最好。

然后你有三个选项:

  • 接受你的处境
  • 将负载从CPU转移到磁盘或其他方式
  • 获得更大的集群:更多的CPU和/或更多的磁盘

转移负载的建议:

  • 如果CPU绑定并且所有CPU都已满负荷,则降低CPU负荷:

    • 检查代码中是否存在不必要的CPU周期
    • 切换到"较低CPU影响"的压缩编解码器:即从GZip切换到Snappy或切换到"无压缩"
    • 调整工作中映射器/减速器的数量
  • 如果IO绑定,并且您还有一些CPU容量:

    • 启用压缩:这会使CPU的工作更加困难,并减少磁盘必须做的工作
    • 尝试使用各种压缩编解码器(我建议使用Snappy或Gzip……我经常使用Gzip)
    • 调整工作中映射器/减速器的数量

引用"Hadoop明确指南,第3版",第306页

因为MapReduce作业通常I/O绑定,拥有比处理器更多的任务以变得更好是有意义的利用

超额订阅量取决于作业的CPU利用率运行,但一个好的经验法则是使的因子在一到两之间更多任务(计算映射和减少任务)。

上面引用的一个处理器相当于一个逻辑核心。

但这只是理论上的,很可能每个用例都不同,就像Niels的详细解释一样,需要进行一些测试。

相关内容

  • 没有找到相关文章

最新更新