2

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つの質問があります:

  1. reduce()で複数の異なるキーを発行することは可能ですか?キーが再利用されないことは知っていますが、それは私にとっては問題ありません。
  2. 追加のキーは、アプリケーション上の理由と、それ以外の場合はリデュースステージの契約に違反すると思うため、すべてのレデューサーで一意である必要があります。レデューサー間(および場合によってはジョブ間)で一意のキーを生成するための良い方法は何ですか?

    たぶん、レデューサー/ジョブIDを取得して、それをキー生成に組み込みますか?

4

1 に答える 1

2
  1. はい、任意の数のキーを出力できます
  2. タスク試行情報をキーに組み込んで、ジョブを一意にすることができます(レデューサー全体で、必要に応じて投機的実行を処理することもできます)。レデューサーの方法からこの情報を取得し、次のContext.getTaskAttemptID()方法でレデューサーID番号を引き出すことができます。TaskAttemptID.getTaskID().getId()
于 2013-03-15T01:42:42.470 に答える