クラスが静的である必要があるか、静的である可能性があるか、内部にある可能性があるか、または内部にある必要があるかという質問はありますか?
で構成されたクラス参照/名前を指定すると、Hadoop 自体がリフレクションによってMapper
またはをインスタンス化できる必要があります。おそらくHadoopが何も知らない他のクラスのコンテキストでのみインスタンスを作成できるため、非静的内部クラスの場合、これは失敗します。(内部クラスがそれを囲むクラスを拡張しない限り、私は推測します。)Reducer
Job
したがって、最初の質問に答えるには、非静的であってはなりません。これにより、ほぼ確実に使用できなくなるためです。2番目と3番目に答えるには、静的(内部)クラスにすることができます。
私にとってMapper
orReducer
は明らかにトップレベルの概念であり、トップレベルのクラスに値します。それらを内部静的にして、「ランナー」クラスとペアにするのが好きな人もいます。これは本当にサブパッケージの目的であるため、好きではありません。これを回避する別の設計上の理由に注意してください。4 番目の質問: いいえ、内部クラスは適切な方法ではないと思います。
最後の質問: はい、クラスMapper
とReducer
クラスを別の JAR ファイルに入れることができます。どの JAR ファイルにこのコードがすべて含まれているかを Hadoop に伝えると、それがワーカーに出荷されます。労働者はあなたを必要としませんJob
。Mapper
ただし、同じ JAR 内でとReducer
が依存するものはすべて必要です。