我可以输出键/值对,使得一个键特定于Hadoop MapReduce中的一个节点吗?

时间:2013-07-10 19:30:38

标签: java hadoop mapreduce

假设我有一个矩阵乘法代码。我希望它能使每个节点的映射器输出由一个reducer获取,即。一个完整的映射器输出文件的密钥将是相同的,这将与另一个节点的密钥不同。例如。如果一个Mapper文件用键1输出键/值对,则另一个Mapper将输出键/值对作为键2,依此类推。 我知道也许这个例子不能这样做,但如果我可以输出密钥作为某个特定的datanode ID或什么?同样,输出中的键可以是给定datanode的一些partciluar ID。有没有办法做到这一点?

基本上我希望一个映射器的所有输出以某种方式进入一个reducer,这可以通过给它们所有一个键来实现,而且我还想要一些并行性以便映射器输出分布通过集群,所以我希望每个密钥都是唯一的。 如果输入没有像那样组织,如何将此一个键分配给某些数据?

(请指出是否需要其他信息。感谢您的帮助)

1 个答案:

答案 0 :(得分:0)

如果您想确保一个映射器的所有输出都在同一个reduce实例中结束,那么您可以使用map任务ID作为输出键:

public class MyMapper extends Mapper<LongWritable, Text, IntWritable, Text> {
    private IntWritable mapId;

    @Override
    protected void setup(Context context) throws IOException,
            InterruptedException {
        mapId = new IntWritable(context.getTaskAttemptID().getTaskID().getId());
    }

    @Override
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        // ...

        context.write(mapId, value);
    }
}