可以在不同的机器上映射和减少作业吗?

时间:2015-10-15 20:43:35

标签: java hadoop mapreduce computation

我在计算卸载方面的工作或非常独特的解决方案,我可以用c ++ / java中的自定义编程很好地做到这一点,但我可以在hadoop或任何搜索中完成相同的搜索其他框架?我搜索了很多,但没有什么值得我发现的。

我们知道使用 Map Reduce 阶段进行的正常hadoop作业,其中两者都在具有几乎相同功率的机器上运行,对于地图阶段,我们不需要电源,可以卸载到像RaspberryPI这样的便宜的商品硬件,而减少应该在强大的机器上运行。

那么是否可以隔离这两个阶段并让它们识别机器?

2 个答案:

答案 0 :(得分:1)

在每个节点上,您可以创建mapred-site.xml文件以覆盖任何默认设置。这些设置仅适用于此节点(任务跟踪器)。

然后,每个节点都可以指定

的值
  1. mapreduce.tasktracker.reduce.tasks.maximum
  2. mapreduce.tasktracker.map.tasks.maximum
  3. 在您只想运行reduce任务的节点上,将最大map任务设置为0,反之亦然。

    以下是list of configuration options

答案 1 :(得分:0)

Reducer作业可以在不同的节点上运行,但在强大的机器上运行Reducer作业有什么好处呢?

您可以为Map和Reduce节点使用相同的商品硬件配置。

微调地图减少作业是一个比较复杂的部分,具体取决于

1)您的输入尺寸

2)Mapper完成Map作业所需的时间

3)设置Map&的数量减速机工作

除了Gerhard建议的配置更改外,请查看一些微调性能的提示Job

适当调整地图数量和减少任务数量的提示

诊断/症状:

1)每个map或reduce任务在不到30-40秒内完成。

2)大型作业未使用群集中的所有可用插槽。

3)在安排了大多数映射器或缩减器之后,一个或两个仍处于待定状态,然后单独运行。

调整作业的地图数量和减少任务非常重要。一些提示。

1)如果每项任务的时间少于30-40秒,则减少任务数量。

2)如果作业输入的输入超过1TB,请考虑将输入数据集的块大小增加到256M甚至512M,以便任务数量更小。

3)只要每个任务运行至少30-40秒,就将映射器任务的数量增加到集群中映射器插槽数量的某个倍数。

4)对于大多数工作,不要安排太多的减少任务。 reduce任务的数量应该等于或略小于集群中reduce槽的数量。

如果您仍希望使用不同的配置,请查看此questionWiki link

修改

在1.x中配置 mapred.map.tasks(或在2.x版本中配置mapreduce.job.maps)& 在1.x中的mapred.reduce.tasks(或2.x版本中的mapreduce.job.reduces)相应地在您的节点中,具体取决于硬件配置。在更好的硬件节点中配置更多减速器。但在配置这些参数之前,请确保已经处理了INPUT大小,映射处理时间等