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

如何让Hadoop使用我系统上的所有内核?,hadoop,Hadoop,我有一个32核的系统。当我使用Hadoop运行MapReduce作业时,我从未看到java进程使用超过150%的CPU(根据top),而且它通常保持在100%左右。应该接近3200% 我需要更改哪个属性(以及在哪个文件中)以启用更多工作人员?可能有两个问题,我将在下面概述。我还想指出,这是一个非常常见的问题,您应该看看前面提到的Hadoop问题 您的mapred.tasktracker.map.tasks.maximum可以在conf/mapred site.xml中设置得较低。如果在检查Jo

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


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

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


您的
mapred.tasktracker.map.tasks.maximum
可以在
conf/mapred site.xml
中设置得较低。如果在检查JobTracker时,您看到几个挂起的任务,但只有几个正在运行的任务,那么这就是问题所在。每个任务都是一个线程,因此假设该节点上最多需要32个插槽


否则,您的数据可能没有被分割成足够的块。您正在运行少量数据吗?可能是您的MapReduce作业只运行了几个输入拆分,因此不需要更多的映射程序。尝试在数百MB的数据上运行作业,看看是否仍然存在相同的问题。 Hadoop会自动分割文件。文件拆分成的块数是文件的总大小除以块大小。默认情况下,将为每个块(而不是每个文件)指定一个贴图任务

conf/hdfs site.xml
配置文件中,有一个
dfs.block.size参数
。大多数人将其设置为64或128mb。然而,如果你想做一些微小的事情,你可以把它设置成更分散的工作

您还可以手动将文件分割为32个块。

我认为您需要将“mapreduce.framework.name”设置为“thread”,因为默认值为“local”

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

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

mapreduce.framework.name
纱线

你说的“检查工作跟踪器”是什么意思?我所能找到的只是它是一个类,与如何使用它实际检查工作无关。我尝试了
mapred.tasktracker.map.tasks.max
设置以及
mapred.tasktracker.map.tasks.max
mapred.tasktracker.reduce.tasks.max
没有效果。我将blocksize设置为8MB,同样没有效果(我的数据文件大约为200MB)。还有其他想法吗?是否有一些管理实用程序可以用来至少调试这个问题?Hadoop中的每个服务(NameNode、JobTracker、TaskTracker、DataNode)都有web界面。它似乎没有很好的文档记录,但这里有一点:我不认为Hadoop会自动重新分割你的文件。试着重新摄取文件,或者复制它们,或者做些什么。你最正确的地方是没有很好的文档记录的部分。尽管遵循了我能找到的所有文档,但我没有正确启动Hadoop。我正在尝试运行其他人的代码,他们的文档也没有说明任何有关设置的内容。