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

Python 为什么增加映射器的数量不会';根本不减少执行时间?,python,hadoop,mapreduce,Python,Hadoop,Mapreduce,我正在测试一个MapReduce程序,看看当我改变映射程序的数量时,执行时间是如何变化的 Hadoop 1.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

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

Hadoop 1.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

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

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

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

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


有人能解释一下原因吗?

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

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

另见: