【问题标题】:So to send all records in SequenceFile to one mapper instance?那么要将 SequenceFile 中的所有记录发送到一个映射器实例?
【发布时间】:2015-12-30 06:14:17
【问题描述】:

首先,我知道这完全违背了 hadoop、并行性和 MR 的目的。话虽如此,我有一个非常具体的用例。

我想将整个序列文件的内容(无论大小)发送到单个映射器实例,但不知道如何处理。

我知道我可以通过使用身份映射器在减速器中执行此操作,但我不想通过排序/分组的开销来将数据放入减速器。

我也知道我可以在本地读取序列文件而无需映射器或缩减器,但这也不适合我的用例。

【问题讨论】:

    标签: hadoop mapper


    【解决方案1】:

    只需增加文件的块大小,使其略大于文件大小。这将确保文件转到单个映射器。这必须在将文件放入 HDFS 时完成。

    正如您所指出的,因为这些文件是由另一个 MR 生成的:

    您可以创建 InputFormat 并覆盖 getSplits() 方法。

    getSplits() 返回一个 InputSplits 数组。返回单个拆分而不是将其拆分为多个部分。

    【讨论】:

    • 这将是一个很好的方法。不幸的是,我还有其他 MR 作业实际上以更直接的方式处理该数据,其中并行映射器需要标准块大小。愚蠢的奇怪用例
    • 想出了一种更简单的方法,但与您的建议非常相似。创建您自己的 InputFormat 但覆盖 isSplitable() 并返回 false。这会将文件中的所有记录发送到单个映射器
    • 非常好。感谢分享。
    猜你喜欢
    • 2012-04-28
    • 2022-01-15
    • 2020-04-18
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多