2013-12-14 20 views
4

我試圖運行從客戶機端的map-reduce程序(寡婦-7),這是的map-reduce類:Hadoop的 - 了java.lang.RuntimeException:java.lang.InstantiationException

Configuration conf = new Configuration(); 

    conf.addResource(new Path("C:\\app\\hadoop-2.0.0-cdh4.3.0\\etc\\hadoop\\core-site.xml")); 
    conf.addResource(new Path("C:\\app\\hadoop-2.0.0-cdh4.3.0\\etc\\hadoop\\hdfs-site.xml")); 

    conf.set("fs.defaultFS", "hdfs://host:8020"); 
    conf.set("mapred.job.tracker", "host:8021"); 

    Job job = new Job(conf, "mapRed"); 
    job.setMapperClass(MapClass.class); 
    //job.setInputFormatClass(org.apache.hadoop.mapreduce.lib.input.TextInputFormat.class); 
    int numreducers = 1; 

    job.setNumReduceTasks(numreducers); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class); 

    Path inp = new Path("/data/test"); 
    FileInputFormat.addInputPath(job, inp); 
    FileOutputFormat.setOutputPath(job, new Path("/data")); 
    System.exit(job.waitForCompletion(true) ? 0 : 1); 

該程序引發異常:

13/12/14 08:27:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
Exception in thread "main" java.lang.RuntimeException: java.lang.InstantiationException 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:128) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2307) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:87) 
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2342) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2324) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:351) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:163) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:335) 
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:194) 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.addInputPath(FileInputFormat.java:368) 
    at org.gridedge.finalytics.MRTemplate.main(MRTemplate.java:55) 
Caused by: java.lang.InstantiationException 
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:126) 
    ... 10 more 

我發現了一個問題simlilar問這裏InstantiationException in hadoop map reduce program和我改變FileInputFormat到的TextInputFormat:

TextInputFormat.addInputPath(job, inp); 
TextOutputFormat.setOutputPath(job, new Path("/data")); 

錯誤保持不變並且在行FileInputFormat.addInputPath(job, inp);

回答

3

正確的配置是在setInputFormat方法中設置TextInputFormat。該行似乎在您的代碼中進行了評論。請將其註釋掉,然後嘗試使用FileInputFormat.addInputPaths的

要設置輸入和輸出格式,您可以看到下面的幾行。

job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class);

讓我知道你是否仍然面臨任何錯誤。