【发布时间】:2015-12-30 06:14:17
【问题描述】:
首先,我知道这完全违背了 hadoop、并行性和 MR 的目的。话虽如此,我有一个非常具体的用例。
我想将整个序列文件的内容(无论大小)发送到单个映射器实例,但不知道如何处理。
我知道我可以通过使用身份映射器在减速器中执行此操作,但我不想通过排序/分组的开销来将数据放入减速器。
我也知道我可以在本地读取序列文件而无需映射器或缩减器,但这也不适合我的用例。
【问题讨论】:
首先,我知道这完全违背了 hadoop、并行性和 MR 的目的。话虽如此,我有一个非常具体的用例。
我想将整个序列文件的内容(无论大小)发送到单个映射器实例,但不知道如何处理。
我知道我可以通过使用身份映射器在减速器中执行此操作,但我不想通过排序/分组的开销来将数据放入减速器。
我也知道我可以在本地读取序列文件而无需映射器或缩减器,但这也不适合我的用例。
【问题讨论】:
只需增加文件的块大小,使其略大于文件大小。这将确保文件转到单个映射器。这必须在将文件放入 HDFS 时完成。
正如您所指出的,因为这些文件是由另一个 MR 生成的:
您可以创建 InputFormat 并覆盖 getSplits() 方法。
getSplits() 返回一个 InputSplits 数组。返回单个拆分而不是将其拆分为多个部分。
【讨论】: