如何让Hadoop使用我系统上的所有核心?

时间:2011-10-09 22:52:40

标签: hadoop

我有一个32核心系统。当我使用Hadoop运行MapReduce作业时,我从未看到java进程使用超过150%的CPU(根据顶部),它通常保持在100%左右。它应该接近3200%。

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

2 个答案:

答案 0 :(得分: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个块。

答案 1 :(得分:1)

我认为你需要设置" mapreduce.framework.name" to" yarn",因为默认值为" local"。

将以下内容放入mapred-site.xml

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>