レデューサーに変数を設定するにはどうすればよいですか?実行後、すべてのタスクが実行を終了した後、ドライバーが変数を読み取ることができますか?何かのようなもの:
class Driver extends Configured implements Tool{
public int run(String[] args) throws Exception {
...
JobClient.runJob(conf); // reducer sets some variable
String varValue = ...; // variable value is read by driver
}
}
回避策
私はこの「醜い」回避策を思いついた。主なアイデアは、カウンターのグループを作成し、その名前が返したい値であるカウンターを1つだけ保持することです(実際のカウンター値は無視します)。コードは次のようになります。
// reducer || mapper
reporter.incrCounter("Group name", "counter name -> actual value", 0);
// driver
RunningJob runningJob = JobClient.runJob(conf);
String value = runningJob.getCounters().getGroup("Group name").iterator().next().getName();
同じことがマッパーにも機能します。これで私の問題は解決しますが、このタイプの解決策は「醜い」と思います。したがって、私は質問を開いたままにしておきます。