2011-12-02 44 views
8

我在4核笔记本电脑上以伪分布式模式运行任务。我如何确保所有内核都得到有效使用。 目前我的作业跟踪器显示一次只能执行一个作业。这是否意味着只使用一个核心?Hadoop伪分布式模式下所有内核的完全利用率

以下是我的配置文件。

CONF /芯-site.xml中:

<configuration> 
    <property> 
     <name>fs.default.name</name> 
     <value>hdfs://localhost:9000</value> 
    </property> 
</configuration> 

CONF/HDFS-site.xml中:

<configuration> 
    <property> 
     <name>dfs.replication</name> 
     <value>1</value> 
    </property> 
</configuration> 

CONF/mapred-site.xml中:

<configuration> 
    <property> 
     <name>mapred.job.tracker</name> 
     <value>localhost:9001</value> 
    </property> 

</configuration> 

EDIT : 根据答案,我需要在mapred-site.xml中添加以下属性

<property> 
    <name>mapred.map.tasks</name> 
    <value>4</value> 
    </property> 
    <property> 
    <name>mapred.reduce.tasks</name> 
    <value>4</value> 
    </property> 
+0

mapred.map.tasks和mapred.reduce.tasks不控制每个节点的map/reduce任务数量。请在选择答案之前尝试确认。 –

+0

@Praveen这是正确的,但由于他有1个节点,他至少需要建议它也使用更多的映射器,而不是仅提高每个跟踪器的最大值。 –

+0

@Nemo除了在mapred-site.xml中添加4的mapred。(map | reduce).tasks值之外,是否更改了mapreduce.tasktracker。(map | reduce).tasks.maximum的值以完全利用所有核心? – AST

回答

3

mapred.map.tasks and mapred.reduce.tasks将控制这一点,并且(我相信)会设置在mapred-site.xml。但是,这将它们确定为群集范围的默认值;更通常的情况下,你可以在每个作业的基础上进行配置。您可以在java命令行上设置相同的参数-D

+0

对于4核心系统,有多少地图和减少任务是最优的? – Nemo

+0

4可能会是一个好的开始 - 尽管您可能很快会在一台机器上绑定I/O而不是CPU绑定。 –

+0

我认为这是新问题。 http://stackoverflow.com/questions/8357630/error-when-setting-mapred-map-tasks-in-pseudo-distributed-mode – Nemo

6

mapreduce.tasktracker.map.tasks.maximummapreduce.tasktracker.reduce.tasks.maximum属性控制每个节点的映射数量和减少任务。对于4核心处理器,从2/2开始,如果需要,从那里更改值。一个插槽是一个map或reduce插槽,将值设置为4/4将使Hadoop框架同时启动4个map和4个reduce任务。总共8个map和reduce任务一次在一个节点上运行。

mapred.map.tasksmapred.reduce.tasks属性控制作业的map/reduce任务总数,而不是每个节点的任务数量。此外,mapred.map.tasks是Hadoop框架的暗示,作业的总映射任务数等于InputSplits的数量。

相关问题