为什么增加映射器的数量根本不会减少执行时间?

2024-04-24 23:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

hadoop1.2.1安装在带有超线程的四核计算机上。 MR程序是用Python编写的,所以我使用Hadoop流媒体来运行这个程序。 文件大小约为500MB。在

在地图上-站点.xml文件中,我添加了以下配置:

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

因为任务的大小应该是任务2的一半。在

我的理解是有多达2个地图任务读取和分析分配给他们的数据。在

当有一个映射器时: Maptask1和Maptask2同时解析数据,但是只有一个映射器要映射。这需要两个波来完成。(工作两次)

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

不过,我看不出执行时间有什么不同。 我试了1,2,4,8,16,32,时间差都在1秒之内。在

有人能解释一下为什么吗??在


Tags: 数据程序数量计算机时间地图tasksmr
2条回答

我猜您的单个输入文件已经使用gzip进行了压缩,您将遇到这样一个事实:gzip是不可拆分的。一个gzip文件仅限于一个映射器,不再限制。在

另请参见:Hadoop gzip compressed files

问题是你是否有足够的工作线程。您需要jobtracker、namenode、tasktracker和datanode的线程。我不认为如果你的硬件不能支持你当前的配置,你就不能期待它的加速。例如,如果您在一台有4个内核的机器上运行1000个线程,那么您的最大加速仍然是4。检查所有配置是否正确的一种方法是在map任务中添加一个log语句,并检查1、2、4、,。。。同时启动。在

相关问题 更多 >