hadoop的任务调度很差

时间:2014-02-07 16:56:52

标签: hadoop mapreduce yarn

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

我发现有一些非常不舒服的东西。我已将其配置为运行8个地图任务。不幸的是,hadoop在一个节点上启动了所有8个map任务,而另一个节点几乎是理想的。有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存在这样的问题?

1 个答案:

答案 0 :(得分:0)

不要将mappers / reducer视为与服务器一对一。它听起来像是你的系统知道负载是如此之低,他们不需要在集群中启动Reducer。它试图避免将文件从主节点传输到从节点的网络开销。

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

要强制均匀分布,您可以尝试为每个映射器/缩减器分配足够的内存,使其需要整个节点。例如,4个节点,8个映射器。强制每个映射器在每个节点上拥有50%的ram。不确定这是否会按预期工作,但实际上Hadoop负载平衡本身在理论上是好的,但对于小数据情况可能看起来不那么好。