2 つの異なる mapreduce ジョブを実行するための 2 つの別個の Java クラスがあります。それらを独立して実行できます。操作対象の入力ファイルは、両方のジョブで同じです。したがって、私の質問は、1 つの Java クラスで 2 つのマッパーと 2 つのレデューサーを次のように定義できるかどうかです。
mapper1.class
mapper2.class
reducer1.class
reducer2.class
そして、好き
job.setMapperClass(mapper1.class);
job.setmapperClass(mapper2.class);
job.setCombinerClass(reducer1);
job.setCombinerClass(reducer2);
job.setReducerClass(reducer1);
job.setReducerClass(reducer2);
これらのセット メソッドは、実際に以前のものをオーバーライドするか、新しいメソッドを追加しますか? コードを試してみましたが、最新の指定されたクラスのみを実行するため、オーバーライドしていると思います。しかし、これを行う方法があるはずですよね?
私がこれを尋ねている理由は、入力ファイルを 1 回 (1 回の I/O) しか読み取れず、2 つのマップ削減ジョブを処理できるからです。また、出力ファイルを 2 つの異なるフォルダーに書き込む方法も知りたいです。現時点では、両方のジョブは別々であり、入力ディレクトリと出力ディレクトリが必要です。