私は大学の課題に Hadoop を使用していますが、コードは動作していますが、小さな問題が発生しています。
レデューサーの数を19に設定しようとしています(ドキュメントが示唆するように、これは0.95 *容量です)。ただし、タスク トラッカーで自分のジョブを表示すると、合計で 1 つのレデューサーと表示されます。
System.err.println("here");
job.setNumReduceTasks(19);
System.err.println(job.getNumReduceTasks());
予想通りの収量:
here
19
しかし、最終出力では次のようになります。
12/05/16 11:10:54 INFO mapred.JobClient: Data-local map tasks=111
12/05/16 11:10:54 INFO mapred.JobClient: Rack-local map tasks=58
12/05/16 11:10:54 INFO mapred.JobClient: Launched map tasks=169
12/05/16 11:10:54 INFO mapred.JobClient: Launched reduce tasks=1
私が上書きした mapreduce の部分は次のとおりです。
- マッパー
- レデューサー
- パーティショナー
- グループ化コンパレータ。
私が最初に考えたのは、パーティショナーがすべてのキーに対して同じ値を返しているということでした。これを確認しましたが、そうではありませんでした。
また、グルーパーが正しく動作することも確認しました。
他に何が原因なのかわかりません。誰かがそれを助けることができれば、それは大歓迎です。
私は非常にアンチ Java の人なので、できれば非常に明確な例を試してみてください。
PS: 私はこのクラスターをセットアップしていません。これは大学によってセットアップされたものであるため、構成変数については不明です。PS: 投稿するにはコードが多すぎたので、特に見たいコードがあれば教えてください。
編集: TejasP から次の質問を受けました。
本当にコードを Hadoop またはローカル モードで実行していますか? (ジョブがジョブトラッカーとタスクトラッカーに表示されるかどうかを確認してください)。
はい、jobtracker UI で表示できます。これは、1 つのレデューサーも報告します。注:これには、settings.xmlで1としてリストされているレデューサーがあります
環境で HADOOP 変数をエクスポートしましたか?
はい、それらはenvに表示され、設定するまでコードはコンパイルされません。
env | grep HADOOP
HADOOP_HOME=/mnt/biginsights/opt/ibm/biginsights/IHC
HADOOP_CONF_DIR=/mnt/biginsights/opt/ibm/biginsights/hadoop-conf
クラスターは単一ノードですか、それとも複数ノードですか? および クラスタが複数のノードからなる場合でも、すべてのノードは正常ですか? 他のノードに問題はありますか?
はい、複数のノードがあります (10) ジョブ トラッカー レポート:
Nodes: 10
Map Task Capacity: 20
Reduce Task Capacity: 20
Blacklisted Nodes: 0
setNumReduceTasks を正しく使用していますか? 上で述べたように、set を呼び出してから get を呼び出し、(19) であるとされていた値を取得しましたが、最終的なコードではまだ 1 しか使用されていません。
詳細を削除することで、コードを小さな map-reduce コードに減らすことができます (これはデバッグ用です)。それを実行します。何が起こるか見てください。同じ問題に直面している場合は、元の質問で削減されたコードを提供してください。
結果を元にもう一度編集してみます