可写实例在同一reducer中的hadoop中重用

时间:2018-08-29 00:55:22

标签: java hadoop mapreduce

我观察到意外的行为,其中看到由化简器创建的自定义writable在同一化简器中被重用。

例如

public class myWritable implements Writable {

    private Map<Long, MyObject> myObjectMap = new HashMap<>();
    private myInt;

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeInt(myInt);
        out.writeInt(myObjectMap.size());
        for (MyObject myObjectInstance: myObjectMap.values()) {
            out.writeLong(myObjectInstance.getId());
        }
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        myInt = in.readInt();
        int myObjectMapSize = in.readInt();

        int myObjectId;

        for (int i = 0; i < myObjectMapSize; i++) {
            myObjectId = in.readLong();

            myObjectMap.put(myObjectId, new MyObject(myObjectId));
        }
    }
}

我发现myObjectMap只会增加我处理的后续密钥的大小。这意味着每个reducer都在重用已创建的可写实例。

这对我来说不太有意义,因为我没有看到doc

中记录的这种行为

我做错什么了吗?

0 个答案:

没有答案