【问题标题】:map-only job - order仅地图作业 - 订单
【发布时间】:2014-03-08 09:41:35
【问题描述】:

我有一个csv 文件。假设它有 2 个拆分,即一个块将由第一个 map() 任务处理,另一个由第二个 map() 任务处理。

在给定的 csv 中,我将“0”替换为 false,将“1”替换为 true。因此,我将为此编写一个仅限地图的工作。作业完成后,我会得到与结果相同的输入文件顺序吗?因为 shufflesort 在 Map 工作之后完成。

有没有办法让输入文件的顺序与结果相同?

【问题讨论】:

    标签: java csv hadoop mapreduce


    【解决方案1】:

    你可以job.setNumReduceTasks(0);。这样,shufflesort 就不会发生。

    但是,输出文件的数量与地图任务的数量一样多(在本例中为 2 个)。如果你连接它们,你会得到你想要的。这可能无关紧要,因为在大多数情况下,Hadoop 允许您在任何需要文件的地方提供一个文件夹。

    【讨论】:

    • 所以我们需要连接文件吗?我们不会把每个文件都放到同一个零件文件中吗?
    • 你不会把每一个都放到同一个零件文件中。每个地图任务都会产生一个零件文件。
    • 那么我可以将结果在 map() 函数中连接起来吗?
    • 你不能在地图函数中这样做。每次拆分都会执行不同的地图任务,并且您无法在地图阶段进行通信。你为什么在乎?如果输出将用于其他 map reduce 作业,您可以提供输出文件夹作为其输入。如果没有,您可以使用cat 连接它们。在这种情况下,Hadoop 不会在性能方面为您提供帮助。
    • 通过单个映射器处理整个 csv 文件的最简单方法是覆盖 FileInputFormat 的 isSplitable 方法并将其设置为返回 false,当您这样做时,整个文件由映射器实例处理并且如果您设置减速器也为 0 则行的输出顺序将与输入完全相同。
    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多