为什么增加Mapper的数量并不会减少执行时间?

时间:2013-12-12 04:26:29

标签: python hadoop mapreduce

我正在测试一个MapReduce程序,看看当我更改映射器的数量时执行时间是如何变化的。

Hadoop 1.2.1安装在具有超线程的四核机器上。 MR程序是用Python编写的,所以我使用Hadoop-streaming来运行这个程序。 文件大小约为500MB。

在mapred-site.xml文件中,我添加了以下配置:

mapred.max.split.size : 250MB
mapred.tasktracker.map.tasks.maximum : 1 //1, 2, 4, 8, 16, 32
mapred.tasktracker.reduce.tasks.maximum : 2 

由于我将分割大小设置为文件大小的一半,因此map任务的数量应为2.

我的理解是,最多有2个map任务读取和解析分配给它们的数据。

当有一个映射器时: Maptask1和Maptask2同时解析数据,但只有一个映射器可以映射。所以映射器需要做两次波。 (工作两次)

现在,我的假设是当映射器的数量增加时: Maptask1和Maptask2同时解析数据,mapper1可以处理Maptask1的输出,mapper2可以处理Maptask2的输出,因此两个映射器可以同时处理。

但是,我发现执行时间没有区别。 我尝试了1,2,4,8,16,32,时差在1秒内完成。

有人可以解释一下原因吗?

2 个答案:

答案 0 :(得分:0)

问题是我认为你是否有足够的工作线程。您需要一个用于jobtracker,namenode,tasktracker和datanode的线程。我不认为根据您当前的配置,如果您的硬件不支持它,您可以期望加速。例如,如果在具有4个内核的计算机上运行1000个线程,则最大加速比仍为4.检查是否所有内容都已正确配置的方法是在map任务中添加日志语句并检查是否1,2,4 ,...同时启动。

答案 1 :(得分:0)

我猜你的单个输入文件已经使用gzip压缩了,而你遇到的事实是gzip不可拆分。一个gzip压缩文件仅限于一个映射器,不再需要。

另请参阅:Hadoop gzip compressed files