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



我正在测试一个MapReduce程序,看看执行时间如何随着映射器数量的变化而变化。

Hadoop1.2.1安装在具有超线程的四核机器上。MR程序是用Python编写的,所以我使用Hadoop流来运行这个程序。文件大小约为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 

由于我将拆分大小设置为文件大小的一半,因此映射任务的数量应该是2。

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

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

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

然而,我认为执行时间没有什么不同。我尝试了1、2、4、8、16、32,时间差都在1秒以内。

有人能解释一下原因吗??

问题是我认为您是否有足够的工作线程。您需要一个用于jobtracker、namenode、tasktracker和datanode的线程。我认为,考虑到你目前的配置,如果你的硬件不支持,你就不会期望加速。例如,如果你在一台4核的机器上运行1000个线程,你的最大加速率仍然是4。检查是否所有内容都配置正确的一种方法是在映射任务中添加一条日志语句,并检查1、2、4,。。。同时启动。

我猜您的单个输入文件已经使用gzip进行了压缩,并且您遇到了gzip不可拆分的事实。一个gzipped文件被限制为一个映射程序,不再有。

另请参阅:Hadoop gzip压缩文件

相关内容

  • 没有找到相关文章

最新更新