Java – Custom MapReduce input format – constructor not found
•
Java
I'm working for Hadoop 0.20 2 write a custom inputformat, and I can't get rid of nosuchmethodexception When I started:
public class ConnectionInputFormat extends FileInputFormat<Text,Connection> { @Override public RecordReader<Text,Connection> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException,InterruptedException { return new ConnectionRecordReader(); } }
This error occurred while running:
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
After the initialization error and online research, I think it may be because I don't have a zero parameter constructor, so I added one:
public class ConnectionInputFormat extends FileInputFormat<Text,Connection> { public ConnectionInputFormat() { System.out.println("NetflowInputFormat Constructor"); } @Override public RecordReader<Text,InterruptedException { return new ConnectionRecordReader(); } }
This is useless, so I added a second constructor that accepts any number of objects:
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,InterruptedException { return new ConnectionRecordReader(); } }
It is not successful to still get the same error and cannot find a solution so far
Full current source: http://pastebin.com/2XyW5ZSS
Solution
Your connectioninputformat class should be static Non - static nested classes add an implicit "this" to each constructor Therefore, the no Arg constructor actually has invisible parameters unless the class is declared static
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码