Tôi đang viết một InputFormat tùy chỉnh cho Hadoop 0.20.2 và đang chạy vào một NoSuchMethodException tôi không thể thoát khỏi. Tôi bắt đầu với:Tùy chỉnh MapReduce định dạng đầu vào - không thể tìm thấy constructor
public class ConnectionInputFormat extends FileInputFormat<Text, Connection> {
@Override
public RecordReader<Text, Connection> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException {
return new ConnectionRecordReader();
}
}
Tôi đã nhận lỗi này khi chạy:
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
Sau khi nhận được báo lỗi inititially và nghiên cứu trực tuyến, tôi nghĩ rằng nó có thể là tôi không có một constructor không có đối số , vì vậy tôi đã thêm một:
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();
}
}
đó không làm việc, hoặc, vì vậy tôi đã thêm một constructor thứ hai mà mất trong bất kỳ số lượng các đối tượng:
public class ConnectionInputFormat extends FileInputFormat<Text, Connection> {
public ConnectionInputFormat() {
System.out.println("NetflowInputFormat Constructor");
}
public ConnectionInputFormat(Object... o) {
System.out.println("NetflowInputFormat Constructor");
}
@Override
public RecordReader<Text, Connection> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException {
return new ConnectionRecordReader();
}
}
Vẫn gặp lỗi tương tự và đến nay vẫn chưa thành công trong việc tìm kiếm giải pháp.
Full nguồn hiện tại: http://pastebin.com/2XyW5ZSS
Chỉ cần xóa hàm tạo của bạn, không cần phải có hàm tạo trong định dạng nhập của bạn. –