2011-08-22 14 views
7

私はHadoop 0.20.2用のカスタムInputFormatを作成していますが、NoSuchMethodExceptionを実行していますが、取り除くことはできません。私が使用を開始:カスタムMapReduceの入力形式 - コンストラクタが見つかりません

public class ConnectionInputFormat extends FileInputFormat<Text, Connection> { 

    @Override 
    public RecordReader<Text, Connection> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException { 
     return new ConnectionRecordReader(); 
    } 
} 

実行しているとき、私はこのエラーを得た:

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: testingground.TestInputJob$ConnectionInputFormat.<init>() 
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115) 
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:882) 
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779) 
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432) 
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447) 
at testingground.TestInputJob.run(TestInputJob.java:141) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) 
at testingground.TestInputJob.main(TestInputJob.java:156) 
Caused by: java.lang.NoSuchMethodException: testingground.TestInputJob$ConnectionInputFormat.<init>() 
at java.lang.Class.getConstructor0(Class.java:2706) 
at java.lang.Class.getDeclaredConstructor(Class.java:1985) 
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:109) 
... 8 more 
Java Result: 1 

をinititiallyエラーを取得し、オンライン調査した結果、私はそれは私がゼロ引数コンストラクタを持っていなかったということかもしれないと思いましたので、私は1追加:

public class ConnectionInputFormat extends FileInputFormat<Text, Connection> { 

    public ConnectionInputFormat() { 
     System.out.println("NetflowInputFormat Constructor"); 
    } 

    @Override 
    public RecordReader<Text, Connection> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException { 
     return new ConnectionRecordReader(); 
    } 
} 

どちらか動作しませんでしたので、私は、任意の数のオブジェクトにかかった秒のコンストラクタを追加しました:

を0

まだ同じエラーが発生しており、これまでに解決策を見つけることができませんでした。

全電流源:http://pastebin.com/2XyW5ZSS

+0

コンストラクタを削除するだけで、入力フォーマットでコンストラクタを作成する必要はありません。 –

答えて

7

あなたConnectionInputFormatクラスには、静的である必要があります。静的でないネストされたクラスには、すべてのコンストラクタに暗黙の 'this'が追加されています。したがって、引数なしのコンストラクタは、クラスが静的宣言されていない限り、実際には見えない引数を持ちます。

+2

昨夜のハードデバッグ後も同様の結論に達しました。コンストラクタに送信される "this"は、親クラス(TestInputJob)でした。次に、クラスは、 "this"またはTestInputJobのコンストラクタのパラメータ数(存在しない)と、ネストされたクラスConnectionInputFormatのコンストラクタのパラメータ数を比較していました。彼らは明らかに異なっているので、失敗していました。 – BugsPray

+0

@BugsPray:それは私が言っていることです。あなたの言葉遣いは良いです。 –

関連する問題