Hadoop MapReduce:是否可以仅使用一小部分输入数据作为MR作业的输入?

时间:2014-11-18 12:15:39

标签: hadoop mapreduce

我的输入数据的关键类是WritableComparable,它以MapFile s的形式出现。有没有办法设置最小和最大密钥,只有记录传输到Mappers之间的密钥?

1 个答案:

答案 0 :(得分:2)

这是不可能的。因为对于map-reduce作业,我们只需指定输入。

我们可以做的一件事是在mapper中编写一个条件。如果密钥是b / w min&最大值,然后只处理键值对&将输出发送到reducer。否则,什么也不做。但即使在这种情况下,我们的地图阶段也在处理所有输入,但是减少阶段只会在我们指定的关键范围内。

更好的方法: 当在给定输入上运行map-reduce作业时,第一个输入将被InputSplit分割,使得每个分割的数据将由一个映射器处理。但是map()方法一次需要一条记录作为键值对。作业RecordReader的责任是处理这个并呈现一个面向记录的视图。

自定义作业的RecordReader,并覆盖getCurrentKey()方法,这样如果键是b / w min& max返回当前键,否则返回null。

通过这样做,只有其键在给定范围内的输入数据的一小部分将被发送到map方法。