Hadoopレデューサーでは、特定の条件下で新しいキーを作成して発行し、これらのキーが一意であることを確認したいと思います。
私が欲しいものの擬似コードは次のようになります:
@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);
}
}
だから私は今2つの質問があります:
- reduce()で複数の異なるキーを発行することは可能ですか?キーが再利用されないことは知っていますが、それは私にとっては問題ありません。
追加のキーは、アプリケーション上の理由と、それ以外の場合はリデュースステージの契約に違反すると思うため、すべてのレデューサーで一意である必要があります。レデューサー間(および場合によってはジョブ間)で一意のキーを生成するための良い方法は何ですか?
たぶん、レデューサー/ジョブIDを取得して、それをキー生成に組み込みますか?