2016-12-09 13 views
1
私はHadoopの上の簡単なプログラムに取り組んでいます

が、私はこのチュートリアルの手順に続く:Hadoopのクラスが見つからない例外

Exception in thread "main" java.lang.ClassNotFoundException: test.java 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:270) 
at org.apache.hadoop.util.RunJar.run(RunJar.java:214) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
:私は2台の異なるマシン上でそれを試してみましたにもかかわらず http://www.bogotobogo.com/Hadoop/BigData_hadoop_Creating_Java_Wordcount_Project_with_Eclipse_MapReduce2.php

を、それがこの例外を示し続けます


package pa2; 
import org.apache.hadoop.conf.Configured; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.FileOutputFormat; 
import org.apache.hadoop.mapred.FileInputFormat; 
import org.apache.hadoop.mapred.JobClient; 
import org.apache.hadoop.mapred.JobConf; 
import org.apache.hadoop.util.Tool; 
import org.apache.hadoop.util.ToolRunner; 


public class test extends Configured implements Tool{ 


public int run(String[] args) throws Exception 
{ if (args.length<2) 
{ 
    System.out.println("plz give proper arguments"); 
    return -1; 
} 
     //creating a JobConf object and assigning a job name for identification purposes 
     JobConf conf = new JobConf(test.class); 

     FileInputFormat.setInputPaths(conf, new Path(args[0])); 
     FileOutputFormat.setOutputPath(conf, new Path(args[1])); 

     conf.setMapperClass(mapper.class); 

     conf.setMapOutputKeyClass(Text.class); 
     conf.setMapOutputValueClass(IntWritable.class); 

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

     JobClient.runJob(conf); 

     return 0; 
} 


public static void main(String[] args) throws Exception 
{ 
     // this main function will call run method defined above. 
    int exitcode = ToolRunner.run(new test(),args); 
     System.exit(exitcode); 
} 
} 

あなたはここで間違っているものを私に教えてくださいできますか?

更新:

マッパークラス:私は減速クラスを書いていない

package pa2; 
import java.io.IOException; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.MapReduceBase; 
import org.apache.hadoop.mapred.Mapper; 
import org.apache.hadoop.mapred.OutputCollector; 
import org.apache.hadoop.mapred.Reporter; 


public class mapper extends MapReduceBase 
     implements Mapper<LongWritable,Text, Text, IntWritable> 
{ 
      public void map(LongWritable Key, Text value, 
      OutputCollector<Text, IntWritable> output, Reporter r) 
      throws IOException { 


      int i=0; 
      String [] array = new String [50]; 


         String name; 
         String year; 
         String s=value.toString(); 

         for (String word:s.split(",")){ 

        word = s.substring(0, s.indexOf(",")+1); 
        year= word.substring(0, s.indexOf(",")+1); 
        name=word.substring(s.indexOf(",")+1); 
        int theyear= Integer.parseInt(year); 


        if(theyear<2000){ 
         array[i] =name; 
         output.collect(new Text(word), new IntWritable(1)); 

         i++;} 

        }  
    } 
} 

。私はjarファイルとしてプロジェクトをエクスポートし、ムービーと呼ばれるテキストファイルをプログラムの入力として作成しました。その後、ターミナルでこれを書いた:

[[email protected] ~]$ cd workspace 
[[email protected] workspace]$ ls 
pa2 pa2.jar training 
[[email protected] workspace]$ hadoop jar pa2.jar test movies.txt output.txt 
Exception in thread "main" java.lang.ClassNotFoundException: test 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:270) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:214) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
+0

このJARファイルはどのように作成しましたか? –

+0

export> jarファイル>プロジェクト名と同じ> pa2.jarという名前をつけました。 – hailah

+0

このチュートリアルをそのまま試してみてください。 'test'と' mapper'は1)Javaクラスとして大文字にする必要があります。デフォルトのパッケージに 'WordCount'があります。 –

答えて

0

これが当面の問題を解決する保証はなく、

package pa2; 

これは、クラス名に付加されます。つまり、完全修飾クラス名はpa2.testです。そのチュートリアルは、コマンドラインでパッケージを指定する必要はありません示したようにあなたは、デフォルトのパッケージを使用した場合

ので、

hadoop jar ~/workspace/pa2.jar pa2.test input output 

を試してみてください。

+0

私はこれを試してみました:有効なJARではありません:/home/cloudera/pa2.jar – hailah

+0

それはそのフォルダにはない/そのJARは有効ではないと言われています。 –

+0

はい申し訳ありませんが、間違っていました。どうもありがとうございました。 – hailah

0

マップクラスの実際の名前は、デフォルトのマップクラスを使用しようとしている場合は、「Mapper.class」を書き、ここ

conf.setMapperClass(mapper.class); 

提供されるべきです。

+0

はい私が持っているマップクラスの名前は "マッパー"です。 – hailah

+0

Eclipseのbuildpathにhadoop jarファイルを追加しましたか? – AkashNegi

+0

はい。私はhadoopのすべてのjarファイルをプロジェクトに追加しました。 – hailah

関連する問題