【问题标题】:Distribute heavyweight tasks evenly between nodes在节点之间平均分配重量级任务
【发布时间】:2013-07-03 04:23:38
【问题描述】:

我有一个 MapReduce 作业,它由一个包含多行记录的输入文件组成。每条记录都需要相当长的时间来处理。因此,我的输入文件,虽然其大小可能远小于 HDFS 块大小,但在单个节点上执行时将花费大量时间。

如何告诉 Hadoop 在节点之间有效地平均分割输入文件?这样即使输入文件很小,它仍然被拆分成多个任务并行执行。

另外,我们能否告诉 hadoop 将文件拆分为正好 N 个任务,其中 N 是可用节点的数量?

谢谢!

编辑: 为了更清楚,我想做的是如下所示。我有很多大文件。我有一个外部程序将处理每个文件。每个文件都需要大量时间来处理。

所以,我将文件的文件名存储在输入文件中,然后我希望 Hadoop 将其平均拆分。然后在映射器中,我将与 ID 对应的文件复制到本地机器并调用程序。

【问题讨论】:

    标签: hadoop mapreduce hdfs


    【解决方案1】:

    您可以为您的工作设置映射器和缩减器任务的数量,如下所示

        conf.setNumMapTasks(10);
        conf.setNumReduceTasks(5);
    

    您还可以使用mapred.max.split.size 属性根据需要更改输入拆分大小。

    【讨论】:

    • 谢谢,我按照建议调整mapred.max.split.size。
    【解决方案2】:

    这个fair amount of time 多少钱?看来你误解了 Hadoop。启动 MR 作业时会有一些初始延迟。这是must 和unavoidable,无论您的数据是1KB 还是1TB。这种延迟是由于初始化、拆分、地图创建等原因造成的。这不是因为您的文件有多个记录。处理大小为far less than HDFS block size 的文件不会给您带来任何好处。坦率地说,这是对 Hadoop 的低效使用。

    您不必告诉 Hadoop 任何事情。该平台足够智能,可以拆分文件以实现最大效率。如果您有一个小于块的文件,并且您仍在拆分它,那么您将进一步降低性能。

    您可以告诉 Hadoop 将文件拆分为 N 部分,但这并不简单。您必须扩展 API 并编写自己的自定义 InputFormat 来实现这一点,因为拆分输入是 InputFormat 的职责。

    但是在做任何这些之前,我建议您阅读更多关于 Hadoop 的内容。另外,请通过这篇文章: http://blog.cloudera.com/blog/2009/02/the-small-files-problem/


    回应您的最后评论:

    如果我理解正确,您正在使用 MR 拆分包含“输入文件名”的文件并将该文件复制到本地 FS。你真的通过这种方法获得了任何主要优势吗?我的意思是,当与 HDFS 这样的分布式存储一起使用时,MR 显示了它的强大功能。此外,当您使用 MR 复制该大文件时,您将失去数据排序并最终可能会得到错误的结果。恕我直言,您最好将这些文件保存在本地 FS 本身并使用简单的 Java 程序拆分包含名称的文件。我认为使用 Hadoop just as a store 没有任何意义。

    【讨论】:

    • 抱歉,我的意思是“每条记录将花费相当长的时间来处理”。因此,基本上每条记录都是存储在其他地方的“某物”的 ID,处理该“物”需要很多时间。我想有效地并行处理所有“事物”,因此问题。
    • 因此您可以将“某物”与其 ID 聚合起来并将它们存储在 HDFS 上,这将为您提供更大的文件,而 Hadoop 知道如何处理大文件
    • 我同意@darkjh。但是,为了让自己清楚,当您的实际目标是处理与此记录(ID)关联的“某物”时,您为什么还要担心“记录(ID)”?
    • 是的,我已经在 HDFS 中存储了“某些东西”。但是,当映射器处理一个 ID 时,它会将事物从 HDFS 复制到本地机器,因为它将由无法读取 HDFS 的外部程序(而不是映射器或减速器)处理。
    • 为了更清楚,我在问题中添加了小解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2014-11-12
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多