0

我有一个具有以下输入文件的 MapReduce 任务

File1    value1
File1    value2
File2    value3
File2    value4

映射器将访问文件名并搜索其中的特定值。

问:我想要一种优化技术来优化这些文件的磁盘访问。我需要将相同的文件 ID 分配给相同的映射器。所以我可以确保文件一次只能由一项任务访问。

示例:必填

Mapper 1: File1 (value1), File1 (value2)
Mapper 2: File2 (value3), File2 (value4)

不需要:

Mapper 1: File1 (value1), File2 (value3)
Mapper 2: File1 (value2), File2 (value4)

有什么帮助吗?

4

4 回答 4

0

可以谦虚的建议你使用reducer来达到你想要的效果。

将一个键的所有值放到同一个任务中就是“减少”的定义。

如果需要进一步减少,请在第一个输出上运行另一个作业。

于 2012-07-23T03:30:44.183 回答
0

我想这

 File1    value1
 File1    value2
 File2    value3
 File2    value4

写入现有文件

确保您想要的方法是按第一列对此输入文件进行排序(并将其存储排序)

于 2012-07-22T21:56:19.880 回答
0

我认为在不对输入数据进行分区的情况下将特定数据发送到地图任务是不可能的。根据需要对输入数据进行分区并使用TextFileInputFormar.isSplittable()

于 2012-07-23T00:52:44.627 回答
0

图片中有 2 个文件,您肯定会有至少 2 个映射,默认 TextInputFormat 作为 hadoop 输入格式。

您所要做的就是创建一个扩展 TextInputFormat 的自定义 InputFormat 并覆盖isSplittable()方法以返回false。在这种情况下,一个文件将由一个映射器完全处理,而下一个文件将由另一个完全处理。

于 2012-07-23T13:47:44.970 回答