2

質問をする前に私の設定を述べるために、

Hadoop Version : 1.0.3

デフォルトの WordCount の例は正常に動作しています。しかし、このページhttp://hadoop.apache.org/common/docs/r0.20.2/mapred_tutorial.htmlに従って新しい WordCount プログラムを作成したとき

私はそれをコンパイルし、チュートリアルで与えられたのと同様の方法で jar しました。しかし、次を使用して実行したとき:

/usr/local/hadoop$ bin/hadoop jar wordcount.jar org.myorg.WordCount ../Space/input/ ../Space/output

次のエラーが発生しました。

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.myorg.WordCount$Map

エラーログ全体がここに貼り付けられています: http://pastebin.com/GNbsfpg3

どこで私は間違えましたか?

4

4 に答える 4

5

エラーメッセージにはいくつかの手がかりがあります。

12/07/14 18:09:38警告mapred.JobClient:引数の解析にはGenericOptionsParserを使用してください。アプリケーションは、同じツールを実装する必要があります。

12/07/14 18:09:38警告mapred.JobClient:ジョブjarファイルが設定されていません。ユーザークラスが見つからない可能性があります。JobConf(Class)またはJobConf#setJar(String)を参照してください。

ドライバーコードを(ジョブを作成して構成する場所で)私たちと共有する必要がありますが、「ジョブjar」を構成していないようです。つまり、ジョブクライアントにはどこにあるかについてのヒントが与えられていません。コードはjarにバンドルされているため、ジョブを実行すると、マップインスタンスが実際に実行されたときにクラスが見つかりません。

あなたはおそらく次のようなものが欲しいでしょう

jobConf.setJarByClass(org.myorg.WordCount.class);
于 2012-07-14T13:38:31.573 に答える
3

私はまったく同じ問題を抱えていましたが、メインコードに以下を追加して修正しました

jobConf.setJarByClass(org.myorg.WordCount.class);

ここでは、完全な main 関数を見つけることができます。 Configuration conf = new Configuration();

    Job job = new Job(conf, "wordcount");
    job.setJarByClass(org.myorg.WordCount.class);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);

job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.waitForCompletion(true);
于 2014-12-17T15:54:08.640 に答える
0

上記のエラーも発生しました。私がしたことは、jar ファイルをクラスターのすべてのノードにコピーし、すべてのスレーブ ノードがこの jar ファイルにアクセスできるようにクラスパスを設定したことです。そして、これは私にとってはうまくいきました。それはあなたを助けるかもしれません。

于 2013-05-30T11:38:18.117 に答える