我有一个32核心系统。当我使用Hadoop运行MapReduce作业时,我从未看到java进程使用超过150%的CPU(根据顶部),它通常保持在100%左右。它应该接近3200%。
我需要更改哪个属性(以及在哪个文件中)以启用更多工作人员?
答案 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>