我有一个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。在这种情况下,一个映射器将完全处理一个文件,另一个则完全处理下一个文件。