Python Hadoop:检查实际运行了多少映射器节点

Python Hadoop:检查实际运行了多少映射器节点,python,hadoop,mapreduce,Python,Hadoop,Mapreduce,我正在用不同数量的映射器和减速机运行一个MR程序,以测试执行时间是如何变化的。我已经到了可以设置分割大小来改变映射器数量的地步,我看到了执行时间的一些变化。 我使用的是远程机器(四核超线程)。 Hadoop版本:1.2.1 输入文件大小:1GB 所以,我现在要做的是验证MR是否真的按照我的配置运行 例如,我将分割大小设置为大约250MB,以便有四个映射器。 在输出文件(_logs/history/job…)中,我看到它说 TOTAL MAP TASKS = 4 LAUNCHED MAP TASK

我正在用不同数量的映射器和减速机运行一个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
(一) 在这种情况下,我能说使用了四个核心(四个映射器)吗

(二) 当我运行TOP时,我只看到两个Java进程和两个python进程(MR程序是用python编写的)。即使我希望有4个映射器或8个映射器,我总是只看到两个Java进程。 这是否意味着我没有使用其他内核?

(1,2)
总映射任务
不反映并行或串行使用。这意味着处理的任务总量,因此,如果您看到两个java进程,则一次执行两个任务

“拆分大小”控制生成的映射任务的数量,但每个节点可以运行无限多个映射任务,同时运行预定义数量的映射程序作业(最多,并非所有映射程序都在运行,根据作业跟踪器交互和其他内容,可能会有一些等待时间)

您可以使用
mapred.tasktracker.map.tasks.maximum
paramether控制每个节点的运行映射程序计数。您可能需要调整JVM内存设置以添加更多映射器。最多将启动
mapred.tasktracker.map.tasks.mapper进程的最大数量(单独的JVM实例),如果其数量等于核心数量,通常将使用所有核心。注意,是操作系统在内核之间调度进程,由操作系统执行负载平衡和性能优化

然而,请注意,对于map任务,通常IO是瓶颈,而不是CPU,因此并行执行不一定会导致单台机器上的加速。当然,如果您没有一些复杂的raid配置


(3) 如果
总图任务
为14,那么您的作业实际上被分为14个部分。

如果您有一台具有4个内核的远程机器,这意味着一个节点,而不是四个。非常感谢!最后一件事我想确定的是,
每个map任务使用一个核心,因此map任务可以同时运行
映射程序同时运行(等待轮到它运行)
,是吗?@kabichan基本上是的,但在最后一点上,核心利用率取决于操作系统。启动4个进程后,操作系统必须在4个内核上进行调度。由操作系统来执行负载平衡,优化系统性能。@kabichan一些映射程序进程(JVM实例)是并发运行的,高达阈值(由…)太好了!再次感谢你对我的帮助和耐心。