我正在测试一个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秒之内。在
有人能解释一下为什么吗??在
我猜您的单个输入文件已经使用gzip进行了压缩,您将遇到这样一个事实:gzip是不可拆分的。一个gzip文件仅限于一个映射器,不再限制。在
另请参见:Hadoop gzip compressed files
问题是你是否有足够的工作线程。您需要jobtracker、namenode、tasktracker和datanode的线程。我不认为如果你的硬件不能支持你当前的配置,你就不能期待它的加速。例如,如果您在一台有4个内核的机器上运行1000个线程,那么您的最大加速仍然是4。检查所有配置是否正确的一种方法是在map任务中添加一个log语句,并检查1、2、4、,。。。同时启动。在
相关问题 更多 >
编程相关推荐