在映射/减少任务中拆分键/值输入文件



我有一个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)

有什么帮助吗?

我想这个

 File1    value1
 File1    value2
 File2    value3
 File2    value4

写入现有文件

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

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

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

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

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

如果图片中有两个文件,那么您肯定至少有两个映射,默认的TextInputFormat作为hadoop输入格式。

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

相关内容

  • 没有找到相关文章

最新更新