首先,我知道这完全违背了hadoop,parallelism和MR的目的。话虽如此,我有一个非常具体的用例。
我想将整个序列文件的内容(无论多大)发送到单个映射器实例,但无法弄清楚如何处理它。
我知道我可以通过使用身份映射器在reducer中执行此操作,但我不想经历排序/分组的开销以将数据导入reducer。
我也知道我可以在没有映射器或缩减器的情况下在本地读取序列文件,但这也不适合我的用例。
答案 0 :(得分:1)
只需将文件的块大小增加到比文件大小多一点。这将确保文件转到单个映射器。将文件放入HDFS时必须这样做。
正如您所指出的,因为这些文件是由另一个MR生成的:
您可以创建InputFormat并覆盖getSplits()方法。
getSplits()返回一个InputSplits数组。返回单个分割,而不是将其分成多个部分。