我正在运行一个带有不同数量的mapper和reducer的MR程序来测试执行时间的变化。我来到了可以设置分割大小以更改映射器数量的点,我看到执行时间有一些变化。 我正在使用远程机器(带有超线程的四核)。 Hadoop版本:1.2.1 输入文件大小:1GB
所以,我现在要做的是验证MR是否真正按照我的配置运行。
例如,我将分割大小设置为大约250MB,以便我有四个映射器。 在输出文件(_logs / history / job ....)中,我看到它说
TOTAL MAP TASKS = 4
LAUNCHED MAP TASKS = 4
FINISHED MAP TASKS = 4
DATA-LOCAL MAP TASKS = 1
(1) 在这种情况下,我可以说使用了四个核心(四个映射器)吗?
(2) 当我运行TOP时,我只看到两个Java进程和两个python进程(MR程序是用python编写的)。即使我希望有4个映射器或8个映射器,我总是只看到两个Java进程。 这是否意味着我没有使用其他核心?
答案 0 :(得分:1)
(1,2)TOTAL MAP TASK
不反映并行或串行使用。这意味着任务的总量,所以如果你看到两个java进程,你可以一次执行2个任务。
分割大小控制生成的地图任务数量,但每个节点可以运行潜在无限的地图任务数量,预定义数量的同时运行的映射器作业(最多,并非所有映射器可能正在运行,基于作业有一些等待时间跟踪器交互和其他东西)。
您可以使用mapred.tasktracker.map.tasks.maximum
参数控制每个节点的运行映射器计数。并且您可能需要调整JVM内存设置以添加更多映射器。将启动最多mapred.tasktracker.map.tasks.maximum
个映射器进程(单独的JVM实例),如果其数量等于核心数,则通常将使用所有核心。请注意,操作系统会在核心之间调度进程,并且由操作系统来执行负载平衡和性能优化。
但请注意,对于地图任务而言,IO通常是瓶颈,而不是CPU,因此并行执行不一定会导致单台机器的加速。当然,如果你没有一些复杂的团队配置。
(3)如果TOTAL MAP TASK
为14,那么你的工作实际上分为14个部分。