【问题标题】:can map and reduce jobs be on different machines?map 和 reduce 作业可以在不同的机器上吗?
【发布时间】:2016-01-14 11:32:52
【问题描述】:

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

据我们所知,使用 MapReduce 阶段制作的普通 hadoop 作业都在具有几乎相同功率的机器上运行,对于地图阶段,我们不需要功率并且可以卸载到像 RaspberryPI 这样的廉价商品硬件上,而 reduce 应该在强大的机器上运行。

那么是否可以隔离这两个阶段并使它们具有机器感知能力?

【问题讨论】:

  • 我不确定您是否可以将 hadoop 配置为始终在不同主机上运行 map/reduce,但请考虑数据本地性,这是在同一主机上运行两个阶段的主要驱动程序
  • 数据本地化在当今世界也是虚拟的,你不觉得吗?考虑我已经安装了一个大的 1tb 硬盘到 RPi?很有可能。
  • 数据本地化是hadoop的主要功能,每个map/reduce作业都处理一小块数据,最好放在本地hdfs分区上
  • 我想说的是,现在本地数据也被虚拟化并安装为 nfs。所以我可以将大硬盘连接到小 RPi 并在上面做地图工作。

标签: java hadoop mapreduce computation


【解决方案1】:

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

然后可以为每个节点指定值

  1. mapreduce.tasktracker.reduce.tasks.maximum
  2. mapreduce.tasktracker.map.tasks.maximum

在您只想运行 reduce 任务的节点上,将最大 map 任务设置为 0,反之亦然。

这里是list of configuration options

【讨论】:

    【解决方案2】:

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

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

    微调 Map reduce 工作是比较棘手的部分,具体取决于

    1) 你的输入大小

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

    3) 设置 Map & Reducer 作业的数量

    等等

    除了 Gerhard 建议的配置更改,看看一些微调性能的技巧Job

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

    诊断/症状:

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

    2) 大型作业不会利用集群中的所有可用插槽。

    3) 在大多数 mapper 或 reducer 被调度后,一两个仍然挂起,然后单独运行。

    调整作业的 map 和 reduce 任务的数量很重要。一些提示。

    1) 如果每个任务花费的时间少于 30-40 秒,请减少任务的数量。

    2)如果作业的输入量超过1TB,可以考虑将输入数据集的block size增加到256M甚至512M,这样tasks的数量会更小。

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

    4) 不要安排太多的 reduce 任务——对于大多数工作来说。 reduce 任务数应等于或略小于集群中的 reduce 槽数。

    如果你还想有不同的配置,看看这个questionWiki link

    编辑:

    在 1.x 中配置 ma​​pred.map.tasks(或 2.x 版本中的 mapreduce.job.maps)ma​​pred.reduce.tasks 在 1.x 中(或 mapreduce. job.reduces in 2.x version) 根据硬件配置在您的节点中相应地减少。在更好的硬件节点上配置更多的 reducer。但在配置这些参数之前,请确保您已处理好 INPUT 大小、地图处理时间等

    【讨论】:

    • 如前所述,map 作业不需要太多功率,而 reduce 需要更多 cpu 功率问题是关于如何降低集群将简单任务卸载到廉价硬件的成本,明白了吗?
    • 根据硬件配置在 VM 节点中相应地配置 mapred.map.tasks 和 mapred.reduce.tasks。在更好的硬件节点上配置更多的 reducer。
    • 在 1.x 中配置 mapred.map.tasks(或 2.x 版本中的 mapreduce.job.maps)和 1.x 中的 mapred.reduce.tasks(或 2 中的 mapreduce.job.reduces .x 版本)相应地在您的节点中,具体取决于硬件配置
    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多