在 Hadoop Reducer 中,我想在特定条件下创建和发出新键,并且我想确保这些键是唯一的。
我想要的伪代码如下:
@Override
protected void reduce(WritableComparable key, Iterable<Writable> values, Context context)
throws IOException, InterruptedException {
// do stuff:
// ...
// write original key:
context.write(key, data);
// write extra key:
if (someConditionIsMet) {
WritableComparable extraKey = createNewKey()
context.write(extraKey, moreData);
}
}
所以我现在有两个问题:
- 是否有可能在 reduce() 中发出多个不同的键?我知道不会使用钥匙,但这对我来说没问题。
额外的密钥在所有 reducer 中必须是唯一的 - 出于应用程序的原因,因为我认为否则它会违反 reduce 阶段的合同。什么是生成跨 reducer(可能跨作业)唯一的密钥的好方法?
也许获取减速器/作业 ID 并将其合并到密钥生成中?