2013-01-15 14 views
6

से संबंधित हैडोप क्लास नॉटफाउंड अपवाद मुझे क्लास नॉटफाउंड अपवाद, "नो जॉब जार फ़ाइल सेट" और हैडोप से संबंधित कई प्रश्न दिखाई देते हैं। उनमें से अधिकांश कॉन्फ़िगरेशन में setJarByClass विधि (या तो JobConf या Job) का उपयोग करने की ओर इशारा करते हैं। मैं अपवाद के साथ थोड़ा परेशान हूं क्योंकि मैं मार रहा हूं क्योंकि मुझे वह सेट मिला है। यहाँ सब कुछ मैं प्रासंगिक लगता है कि है (मुझे पता है कि अगर मैं कुछ भी हटा दिया है तो कृपया):मैडक्लास

echo $CLASS_PATH 
/root/javajars/mysql-connector-java-5.1.22/mysql-connector-java-5.1.22-bin.jar:/usr/lib/hadoop-0.20/hadoop-core-0.20.2-cdh3u5.jar:. 

कोड (ज्यादातर छोड़े गए)

import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.conf.Configured; 
import org.apache.hadoop.util.ToolRunner; 
import org.apache.hadoop.util.Tool; 
import org.apache.hadoop.util.GenericOptionsParser; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.io.IntWritable; 

import java.io.IOException; 
import java.util.Iterator; 
import java.lang.System; 
import java.net.URL; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.ResultSet; 

public class QueryTable extends Configured implements Tool { 

    public static class MapClass extends Mapper<Object, Text, Text, IntWritable>{ 

    public void map(Object key, Text value, Context context) 
      throws IOException, InterruptedException { 
      ... 
     } 
    } 

    public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable>{ 
     private IntWritable result = new IntWritable(); 

     public void reduce (Text key, Iterable<IntWritable> values, 
          Context context) throws IOException, InterruptedException { 
      ... 
     } 
    } 

    public int run(String[] args) throws Exception { 
     //Configuration conf = getConf();                                                          
     Configuration conf = new Configuration(); 

     Job job = new Job(conf, "QueryTable"); 
     job.setJarByClass(QueryTable.class); 

     Path in = new Path(args[0]); 
     Path out = new Path(args[1]); 
     FileInputFormat.setInputPaths(job, in); 
     //FileInputFormat.addInputPath(job, in);                                                         
     FileOutputFormat.setOutputPath(job, out); 

     job.setMapperClass(MapClass.class); 
     job.setCombinerClass(Reduce.class); // new                                                        
     job.setReducerClass(Reduce.class); 

     job.setInputFormatClass(TextInputFormat.class); 
     job.setOutputFormatClass(TextOutputFormat.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(Text.class); 

     System.exit(job.waitForCompletion(true)?0:1); 
     return 0; 
    } 

    public static void main(String[] args) throws Exception { 
     int res = ToolRunner.run(new Configuration(), new QueryTable(), args); 
     System.exit(res); 
    } 
} 

मैं तो, संकलन जार बनाते हैं, और चलाएँ:

13/01/14 17:09:30 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 
**13/01/14 17:09:30 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).** 
13/01/14 17:09:30 INFO input.FileInputFormat: Total input paths to process : 1 
13/01/14 17:09:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
13/01/14 17:09:30 WARN snappy.LoadSnappy: Snappy native library not loaded 
13/01/14 17:09:31 INFO mapred.JobClient: Running job: job_201301081120_0045 
13/01/14 17:09:33 INFO mapred.JobClient: map 0% reduce 0% 
    13/01/14 17:09:39 INFO mapred.JobClient: Task Id : attempt_201301081120_0045_m_000000_0, Status : FAILED 
java.lang.RuntimeException: java.lang.ClassNotFoundException: QueryTable$MapClass 
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1004) 
    at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:217) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:602) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:266) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1278) 
    at org.apache.hadoop.mapred.Child.main(Child.java:260) 
Caused by: java.lang.ClassNotFoundException: QueryTable$MapClass 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadCl 
:

javac QueryTable.java -d QueryTable 
jar -cvf QueryTable.jar -C QueryTable/ . 
hadoop jar QueryTable.jar QueryTable input output 

यहाँ अपवाद नहीं है

टेक्स्ट की उस विशाल दीवार के लिए खेद है। मुझे समझ में नहीं आता कि मुझे नौकरी जार फ़ाइल सेट के बारे में चेतावनी क्यों मिल रही है। मैंने इसे अपनी रन विधि में सेट किया है। साथ ही, जॉब क्लाइंट द्वारा चेतावनी जारी की जाती है, और मेरे कोड में मैं जॉब नो जॉब क्लाइंट का उपयोग कर रहा हूं। अगर आपके पास कोई विचार या फीडबैक है तो मुझे बहुत दिलचस्पी है। आपके समय के लिए धन्यवाद!

संपादित

जार के सामग्री:

jar -tvf QueryTable.jar 
    0 Tue Jan 15 14:40:46 EST 2013 META-INF/ 
    68 Tue Jan 15 14:40:46 EST 2013 META-INF/MANIFEST.MF 
3091 Tue Jan 15 14:40:10 EST 2013 QueryTable.class 
3173 Tue Jan 15 14:40:10 EST 2013 QueryTable$MapClass.class 
1699 Tue Jan 15 14:40:10 EST 2013 QueryTable$Reduce.class 
+0

आप इसे सामग्री को दिखाने (और अपने प्रश्न के बजाय एक टिप्पणी के रूप में वापस पेस्ट) –

उत्तर

3

मैं अपने स्रोत के शीर्ष पर एक पैकेज की घोषणा के द्वारा इस समस्या को ठीक करने में सक्षम था।

package com.foo.hadoop; 

मैं तो संकलित, जार बनाया है, और स्पष्ट रूप से पैकेज वर्ग के नाम के लिए prepended साथ Hadoop कहा जाता है।

hadoop jar QueryTable.jar com.foo.hadoop.QueryTable input output 

मैं समझता हूँ कि यह क्या ज्यादातर लोगों, के साथ शुरू किया होता हालांकि मैं यह अभी भी एक पैकेज निर्धारित किए बिना ही काम करेंगे लगता है कि है। हालांकि यह निश्चित रूप से बेहतर अभ्यास है और इसने मुझे आगे बढ़ने की इजाजत दी है।

+0

मैं इस एक ही मुद्दा जब मैं एक Runnable JAR फ़ाइल के रूप में जार संकलित मिल करने के लिए अपने जार पर एक जार -tvf कर सकते हैं। मैंने इसे सामान्य जार में बदल दिया और पैकेज सहित पूर्ण पथ देने के आपके दृष्टिकोण के साथ यह ठीक काम किया .. – himanshu

+0

मेरे लिए काम नहीं कर रहा है, फिर भी 'क्लास नॉटफाउंड अपवाद: com.foo.hadoop.SomeClass' – CDT

+0

आपका जार कमांड देखो पसंद? "Jar -tvf your_jar" चलाने के बारे में क्या? – cbrown