【问题标题】:hadoop cluster: map task run only on one machine and not allhadoop集群:地图任务只在一台机器上运行,而不是全部
【发布时间】:2011-10-25 20:50:11
【问题描述】:

我有一个hadoop cluster of three machines,其中一台机器充当主机和从机。

当我运行wordcount-example 时,它会在两台机器上运行地图任务——worker1worker2但是当我运行自己的代码时,它只能在一台机器上运行 - worker1,我怎样才能让地图任务在所有机器上运行?

Input Split Locations

/default-rack/master
/default-rack/worker1
/default-rack/worker2  

已修复!!!

我在mapred-site.xml 的配置中添加了以下内容并修复了它

<property>
  <name>mapred.map.tasks</name>
  <value>100</value>
</property>

【问题讨论】:

  • 流式传输和常规 Java MR 作业的调度算法相同。调度任务的位置应该没有任何区别,除非 MR 插槽在 JobTracker 中未标记为空闲。
  • 请在这两种情况下描述您输入的内容。诸如:输入文件的数量、文件大小和使用的压缩。
  • @Niels - 输入拆分位置已在原始查询中指定。看起来拆分位置在有/没有流的情况下是相同的。 FIFO 调度逻辑(默认)在有/没有流的情况下是相同的。
  • @Praveen - 我不明白你刚才说什么。我表示白日梦者应该指出他的输入是什么样的。我怀疑他正在针对不同的输入文件运行两个不同的作业,并且他自己的作业针对“小”文件和/或“不可拆分”文件运行。
  • @daydreamer - 为什么添加 mapred.map.tasks 可以解决问题?

标签: python hadoop mapreduce hadoop-streaming


【解决方案1】:

您的输入有多大? Hadoop 将作业拆分为输入拆分,如果您的文件太小,它将只有一个拆分。

尝试一个更大的文件——比如大约 1GB 大小,然后看看你如何得到映射器。


您还可以检查以确保每个 TaskTracker 都正确地向 JobTracker 报告。如果有未正确连接的TaskTracker,将无法获取任务:

   $ hadoop job -list-active-trackers

这个命令应该输出你所有的 3 个主机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多