Hadoop 用のカスタム出力形式を構築していますが、すべてのレデューサー (RecordWriters) がいつ完了するかを出力形式で知る方法があるかどうか疑問に思っていました。
1 つの RecordWriter が完了したことを知るには、RecordWriter の close メソッドを使用できますが、すべての RecordWriter が完了したときに何らかのクリーンアップを実行するのはどうでしょうか。
Hadoop 用のカスタム出力形式を構築していますが、すべてのレデューサー (RecordWriters) がいつ完了するかを出力形式で知る方法があるかどうか疑問に思っていました。
1 つの RecordWriter が完了したことを知るには、RecordWriter の close メソッドを使用できますが、すべての RecordWriter が完了したときに何らかのクリーンアップを実行するのはどうでしょうか。
に依存する代わりに、ドライバー自体を使用して最終的なクリーンアップを行うことができますOutputFormat。本当にそのような機能(API)を提供するかどうかは疑問です。このfinalize方法は最後の手段かもしれませんが、まったくお勧めできません。
仕事が終わってからの返却waitForCompletion方法です。Jobしたがって、次のように単純に実行します。
boolean status = job.waitForCompletion(true);
if(status){
// clean up required for successful jobs
} else {
// clean up required for failed jobs
}
クリーンアップがジョブの成功/失敗に関係ない場合は、その部分を削除してif-elseください。OutputFormatそして、クラスに削除を行うメソッドが本当に必要な場合は、それを作成してstaticください。例:
job.waitForCompletion(true);
CustomOutputFormat.cleanUp();
これであなたのニーズが満たされることを願っています。