Пользовательский формат ввода MapReduce - не удается найти конструктор

Я пишу собственный InputFormat для Hadoop 0.20.2 и сталкиваюсь с исключением NoSuchMethodException, от которого не могу избавиться. Я начал с:

public class ConnectionInputFormat extends FileInputFormat {

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

У меня была эта ошибка при запуске:

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: testingground.TestInputJob$ConnectionInputFormat.()
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.()
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

После первоначального получения ошибки и исследования в Интернете я подумал, что, возможно, у меня нет конструктора с нулевым аргументом, поэтому я добавил один:

public class ConnectionInputFormat extends FileInputFormat {

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

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

] Это тоже не сработало, поэтому я добавил второй конструктор, который принимал любое количество объектов:

public class ConnectionInputFormat extends FileInputFormat {

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

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

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

По-прежнему получаю ту же ошибку и пока не смог найти решение.

Полный текущий источник: http://pastebin.com/2XyW5ZSS

7
задан BugsPray 22 August 2011 в 22:00
поделиться