【问题标题】:Hadoop MapReduce: How to ensure multiple tasks are executed in parallel among all nodesHadoop MapReduce:如何确保多个任务在所有节点之间并行执行
【发布时间】:2016-09-03 23:00:40
【问题描述】:

我在 HDFS 中有一个任务列表文件,任务列表受 CPU 限制,将在带有 Hadoop MapReduce(仅限地图)的小型 5 节点集群中执行。例如,任务列表文件包含 10 行,每行对应一个任务命令。每个任务的执行都需要很长的时间,所以列出的 10 个任务在所有 5 个节点上并行执行肯定会更有效率。

但是,由于任务列表文件很小,这个数据块可能只位于一个节点上,因此根据数据局部性原则,只有该节点会执行所有这 10 个任务。是否有任何解决方案可以确保所有 10 个任务在所有 5 个节点上并行执行?

【问题讨论】:

  • 取决于您是否想在集群上执行其他操作,非常简单,但有一些缺点,解决方案可能是限制每个节点的映射器数量(mapred.tasktracker.map.tasks.maximum 配置)

标签: hadoop mapreduce


【解决方案1】:

默认情况下,map reduce 每次拆分都会运行一个映射器。拆分是一个块,因此如果您有一个非常大的文件,您将获得每个文件块大小的一个映射器(默认为 128MB),它将与其他块并行处理该 128MB 块。

在您的情况下,您在一个非常小的文件中有一系列行 - 这只是一个拆分,因此它将由单个映射器处理。

但是,您可以创建 10 个 10 行文件,而不是 10 行文件吗?然后您将有 10 个拆分,map reduce 将在集群中并行运行 10 个映射器(取决于可用资源)来处理您的任务。

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多