2011-10-09 96 views
3

我有一个32核心系统。当我使用Hadoop运行MapReduce作业时,我从来没有看到java进程使用超过150%的CPU(根据上图),并且它通常保持在100%左右。它应该接近3200%。如何让Hadoop使用我系统上的所有内核?

哪些属性需要更改(以及在哪个文件中)以启用更多工作人员?

回答

2

可能有两个问题,我在下面概述。我还想指出这是一个非常常见的问题,您应该查看以前提出的Hadoop问题。


mapred.tasktracker.map.tasks.maximum可以在conf/mapred-site.xml设置为低电平。如果您检查JobTracker时,会出现这个问题,您会看到几个未完成的任务,但只有几个正在运行的任务。每个任务都是单个线程,所以假设您需要该节点上最多32个插槽。


否则,您的数据可能没有被分割成足够的块。你是否在运行少量的数据?这可能是因为您的MapReduce作业仅运行少量输入分割,因此不需要更多映射器。试着在数百MB的数据上运行你的工作,看看你是否仍然有同样的问题。 Hadoop会自动分割您的文件。文件分割成的块的数量是文件的总大小除以块大小。默认情况下,一个地图任务将被分配给每个块(不是每个文件)。

在您的conf/hdfs-site.xml配置文件中,有一个dfs.block.size parameter。大多数人将其设置为64或128mb。然而,如果你想要做的事情很小,你可以设置这个来分割更多的工作。

您也可以手动将文件拆分为32个块。

+0

你是什么意思 “检查JobTracker的”?我能找到的关于这是一堂课,没有关于如何使用它来实际检查工作。 – Adam

+0

我曾尝试'mapred.tasktracker.map.tasks.maximum'设置以及'mapred.tasktracker.map.tasks.maximum'和'mapred.tasktracker.reduce.tasks.maximum',但没有任何效果。我将块大小设置为8 MB,并且没有任何效果(我的数据文件大约为200MB)。任何其他想法?是否有一些管理实用程序可用于至少调试该问题? – Adam

+0

Hadoop中的每个服务(NameNode,JobTracker,TaskTracker,DataNode)都具有Web界面。它似乎没有很好的记录,但有一点在这里:http://hadoop.apache.org/common/docs/current/single_node_setup.html#Execution –

1

我想你需要设置“mapreduce.framework.name”为“yarn”,因为默认值是“local”。

把下列您mapred-site.xml中

<property> 
<name>mapreduce.framework.name</name> 
<value>yarn</value> 
</property> 
相关问题