在map / reduce任务中拆分键/值输入文件

时间:2012-07-22 19:28:47

标签: hadoop mapreduce

我有一个MapReduce任务,其中包含以下输入文件

File1    value1
File1    value2
File2    value3
File2    value4

Mapper将访问文件名并在其中搜索特定值。

问题: 我想有一个优化技术来优化这些文件的磁盘访问。我需要将相同的文件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 个答案:

答案 0 :(得分:0)

我想这个

 File1    value1
 File1    value2
 File2    value3
 File2    value4

写入现有文件

确保所需内容的方法是按第一列对此输入文件进行排序(并将其存储为已排序)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我可以谦虚地建议你使用减速器来达到你想要的效果。

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

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

答案 3 :(得分:0)

如果图片中包含2个文件,您最多只能使用默认TextInputFormat作为hadoop输入格式的2个地图。

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