我是hadoop的新手,我正在测试不同数量的地图任务之间的性能差异并减少任务。 file size is about 5GB
和hadoop已安装在4 core/8 core machine (hyper threading)
上。
map和reduce是用python编写的,所以我按-D mapred.map.tasks=2
指定地图任务的数量,并按-D mapred.reduce.tasks=2
指定减少任务的数量。
问题是结果没有显示不同数量的地图任务之间的任何性能差异。
结果
+----------+----------+----------+
| map | reduce | time |
+----------+----------+----------+
| 1 | 1 | 47m 09s |
| 2 | 1 | 45m 35s |
| 4 | 1 | 46m 30s |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1 | 2 | 38m 37s |
| 2 | 2 | 39m 22s |
| 4 | 2 | 39m 29s |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1 | 4 | 38m 18s |
| 2 | 4 | 38m 48s |
| 4 | 4 | 38m 23s |
+----------+----------+----------+
似乎使用1个reduce任务和使用2个reduce任务之间存在一些微小的差异,但是当我更改map任务的数量时没有区别。这就是所有任务只在一个节点上执行,并且map任务没有并行运行?
可能导致这种情况的原因是什么?我很感激任何信息。
我也尝试在mapred-site.xml
中而不是在命令中指定这些值,但没有做任何更改。
答案 0 :(得分:0)
选项mapred.map.tasks
不是hadoop的指令but a hint,那么你是如何检查执行的实际地图任务数量的?执行作业时,您可以在task tracker中监视作业跟踪器中正在运行的作业以及正在运行的任务。此外,你可以在你的hadoop机器上ssh
,并检查运行map / reduce任务,那些将是java进程。
您可以尝试在mapreduce.tasktracker.map.tasks.maximum
中将mapred-site.xml
设置为每个节点绑定的映射器,以查看并行执行的好处。
要获得更多性能监视器选项,您可能会选择安装Ganglia,另请参阅此博客条目:Monitoring Hadoop beyond Ganglia