2016-10-03 6 views
-1

Map Reduce Programの実行中にNullPointer例外が発生します。 なぜこのエラーが発生しているのか理解してください。MapReduceプログラムの実行中にNullPointer例外を取得する

public class AvgDriver extends Configured implements Tool{ 

    @Override 
    public int run(String[] arg0) throws Exception { 

     Job job=Job.getInstance(); 
     job.setJar("AvgSalary.jar"); 

     job.setMapperClass(AvgMapper.class); 
     job.setMapOutputKeyClass(NullWritable.class); 
     job.setMapOutputValueClass(DoubleWritable.class); 



     //job.setInputFormatClass(TextInputFormat.class); 

     job.setReducerClass(AvgReducer.class); 
     job.setOutputKeyClass(NullWritable.class); 
     job.setOutputValueClass(DoubleWritable.class); 

     FileInputFormat.setInputPaths(job, new Path(arg0[0])); 
     FileOutputFormat.setOutputPath(job, new Path(arg0[1])); 

     return job.waitForCompletion(true)?0:1; 
    } 

    public void main(String [] args) throws Exception 
    { 

     System.exit(ToolRunner.run(new AvgDriver(), args)); 
    } 
} 




public class AvgMapper extends Mapper<LongWritable, Text, NullWritable, DoubleWritable> { 

    public void map(LongWritable key , Text value , Context context) throws IOException, InterruptedException 
    { 
     String values=value.toString(); 
     String [] val=values.split("\t"); 

     double convertVal=Double.parseDouble(val[2]); 

     context.write(NullWritable.get(), new DoubleWritable(convertVal)); 
    } 

} 


public class AvgReducer extends Reducer<NullWritable, DoubleWritable, NullWritable, DoubleWritable> { 

    double total=0.0; 
    int count=0; 

    public void Reduce(NullWritable key , Iterator<DoubleWritable> value , Context context) throws IOException, InterruptedException 
    { 
     while (value.hasNext()) { 
      total = total+ ((DoubleWritable) value.next()).get(); 
      count++; 
     } 

     total=total/count; 

     context.write(key, new DoubleWritable(total)); 
    } 
} 
+0

スタックトレースは、コードの一部を指している必要があります。それはどれですか?太陽のスレッドで – Amit

+0

[Clouderaのの@クイックスタートPracticeNew] $のHadoopのジャーAvgSalary.jar com.ankur.practics.AvgDriver /user/hdfs/empSal.txt /ユーザー/ HDFS/output15 例外 "メイン" java.lang.NullPointerExceptionが \t .reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)sun.reflect.DelegatingMethodAccessorImpl.invokeで \t(DelegatingMethodAccessorImpl.java:43)で \tれるjava.langで \t .reflect.Method.invoke(Method.java:606) \t at org.apache.hadoop.util.RunJar.run(RunJar.java:221) \t at org.apache.hadoop.util.RunJar.main(RunJar .java:1 36) –

+0

上記のスタックトレースには、この例外がどこに来るのかについてのクラスの記述はありません。 –

答えて

1

あなたは、mainメソッドに静的が欠落しています。以下のように更新してください。

public static void main(String [] args) throws Exception 
+0

Job job = Job.getInstance()がうまく動作している別のプログラムを作成しました。 –

+0

これを試しましたか?それは問題を解決しましたか?どこでnullポインタを取得しているのでしょうか、スタックトレースの特定のJava行になります。 –

+0

私はまだ同じエラーを試みました。スレッド内 –

関連する問題