我正在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存在这样的问题?
答案 0 :(得分:0)
不要将mappers / reducer视为与服务器一对一。它听起来像是你的系统知道负载是如此之低,他们不需要在集群中启动Reducer。它试图避免将文件从主节点传输到从节点的网络开销。
将映射器和缩减器的数量视为允许群集运行的并发线程数。在确定为每个映射器/缩减器分配多少内存时,这很重要。
要强制均匀分布,您可以尝试为每个映射器/缩减器分配足够的内存,使其需要整个节点。例如,4个节点,8个映射器。强制每个映射器在每个节点上拥有50%的ram。不确定这是否会按预期工作,但实际上Hadoop负载平衡本身在理论上是好的,但对于小数据情况可能看起来不那么好。