2013-05-15 30 views
0

我使用hadoop 1.1.1。我的项目正在处理6000多个文件。我的集群包含2个节点:主站(CPU:COREi7,RAM:6G)和从站(CPU:COREi3,RAM:12G)。 MAPPER的数量是16.当我在洗牌阶段将REDUCER的数量设置为大于1(例如2,...,16)时,RAM开始交换,这导致我的系统速度显着降低。在HADOOP中混洗时交换内存

如何停止交换RAM? MAP和REDUCE之间的过程中保存在RAM中的是什么? 有没有参考?

非常感谢。

+1

你在'mapred-site.xml'('mapred.child.java.opts','mapred.map.child.java.opts'和'mapred.reduce.child)中设置了什么jvm标志。 java.opts')?还有,为每个节点配置的映射和减少任务的最大数量是多少(在mapred-site.xml中) –

+0

master:'mapred.child.java.opts = -Xmx2g','mapred.tasktracker.map。 task.maximum = 8'和'mapred.tasktracker.reduce.task.maximum = 8'.And in slave'mapred.child.java.opts = -Xmx2g','mapred.tasktracker.map.task.maximum = 4'和'mapred.tasktracker.reduce.task.maximum = 4'。 – user90723014

回答

2
所以在主

  • 6G物理RAM;
  • 每个进程分配的2G;
  • 8个mappers和8个reducers可以同时运行;
  • 8x2 + 8x2,32G内存需要,如果所有任务都超出了 - 超过您的物理量的5倍。

在从属:

  • 12G物理RAM;
  • 每个任务分配的2G;
  • 4 mappers,4 reducer;
  • 需要4x2 + 4x2,16G内存 - 比物理性能高出50%。

现在,如果你一次只能运行一个作业,可以将软启动配置属性设置为1.0,以确保映射器和减压器不要同时运行,这将有所帮助,但你仍然最大的主人。

我建议你减少内存分配到1G(如果你真的想要在每个节点上有很多映射/减少插槽),或者减少两个节点的最大任务数,这样你就更接近物理金额(如果跑出最大)。

+0

此外,您可以将mapred.reduce.slowstart.completed.maps设置为1.00,这意味着减速器将等待所有映射器完成,因此没有并行运行减速器和映射器。这可以减少内存需求。 – darkjh