【问题标题】:hadoop's poor scheduling of taskshadoop 的任务调度很差
【发布时间】:2014-02-08 04:59:09
【问题描述】:

我正在 hadoop 上运行一些 map reduce 任务。映射器用于生成数据,因此不依赖于 hdfs 块放置。为了测试我的系统,我使用了 2 个节点和一个主节点。我正在用纱线对 hadoop-2.0 进行测试。

我发现 hadoop 有一些非常不舒服的地方。我已将其配置为运行 8 个地图任务。不幸的是,hadoop 在一个节点上启动了所有 8 个地图任务,而另一个节点几乎是理想的。有 4 个减速器,它也不平衡这些减速器。发生这种情况时,确实会导致性能不佳。

我在作业跟踪器和任务跟踪器的 mapred-site.xml 中设置了这些属性

 <property>
    <name>mapreduce.tasktracker.map.tasks.maximum</name>
    <value>2</value>
  </property>
  <property>
    <name>mapreduce.tasktracker.reduce.tasks.maximum</name>
    <value>2</value>
  </property>

谁能解释一下这个问题是否可以解决,或者为什么hadoop会存在这样的问题?

【问题讨论】:

  • 您能否描述更多关于“生成数据,因此不依赖于 hdfs 块放置”的信息。了解工作的数据来源?
  • 它基本上就像 hadoop 中的随机文本生成器,其中映射器生成随机数据。您实际上并不需要输入数据源。

标签: hadoop mapreduce hadoop-yarn


【解决方案1】:

不要将映射器/缩减器与服务器视为一对一。听起来正在发生的事情是您的系统知道负载如此之低,以至于无需跨集群启动减速器。它试图避免将文件从主节点传输到从节点的网络开销。

将映射器和缩减器的数量视为您将允许集群运行的并发线程数。在确定为每个映射器/减速器分配多少内存时,这一点很重要。

要强制均匀分布,您可以尝试为每个映射器/减速器分配足够的内存,以使其需要整个节点。例如,4 个节点,8 个映射器。强制每个映射器在每个节点上拥有 50% 的内存。不确定这是否会按预期工作,但实际上 Hadoop 负载平衡本身在理论上是件好事,但在小数据情况下似乎并非如此。

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2013-03-21
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2020-11-19
    • 2011-02-10
    相关资源
    最近更新 更多