每一个可运行的Jar包都要为它指定主类,要么通过manifest文件,要么通过命令行参数


2013/12/13 ch huang <[email protected]>

> i find the reason
> no main class found
>
> # hadoop classpath
>
> /etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*:/usr/lib/hadoop/lib
>
> normal
>
>
> /etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*::/usr/lib/hadoop/lib:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*
>
> there exist ::   :) i just do not know the mean
>
> On Fri, Dec 13, 2013 at 10:40 AM, ch huang <[email protected]> wrote:
>
>> no ,it need not , hadoop can run class directly,i try in other box,it
>> work fine,
>>
>>
>> # hadoop com/test/demo/WordCount
>> Error: Could not find or load main class com.test.demo.WordCount
>> [root@CHBM224 test]# hadoop classpath
>>
>> /etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*
>> [root@CHBM224 test]# echo $CLASSPATH
>> .:/usr/java/jdk1.7.0_25/lib/dt.jar:/usr/java/jdk1.7.0_25/lib/tools.jar
>> ---copy class path to another box ,and it's work fine
>>
>> # cd test/
>> [root@CH22 test]# hadoop com/test/demo/WordCount
>>
>> teragen <num rows> <output dir>
>> [root@CH22 test]# hadoop classpath
>>
>> /etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*::/usr/lib/hadoop/lib:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*
>> [root@CH22 test]# echo $CLASSPATH
>> .:/usr/java/jdk1.6.0_35/lib/dt.jar:/usr/java/jdk1.6.0_35/lib/tools.jar
>>
>>
>>  On Fri, Dec 13, 2013 at 10:17 AM, Tao Xiao <[email protected]>wrote:
>>
>>> how did you package and compile your jar ? did you specify the main
>>> class for the JAR file you generated ?
>>>
>>>
>>> 2013/12/13 ch huang <[email protected]>
>>>
>>>> hi,maillist:
>>>>
>>>>              i rewrite WordCount.java and try to compile and run  it
>>>> but it say not find main class ,why?
>>>>
>>>> [root@CHBM224 myMR]# cat WordCount.java
>>>> import java.io.IOException;
>>>> import java.util.StringTokenizer;
>>>> import org.apache.hadoop.conf.Configuration;
>>>> import org.apache.hadoop.conf.Configured;
>>>> import org.apache.hadoop.fs.Path;
>>>> import org.apache.hadoop.io.IntWritable;
>>>> import org.apache.hadoop.io.Text;
>>>> 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.output.FileOutputFormat;
>>>> import org.apache.hadoop.util.GenericOptionsParser;
>>>> import org.apache.hadoop.util.ToolRunner;
>>>> import org.apache.hadoop.util.Tool;
>>>> public class WordCount extends Configured implements Tool {
>>>>   public static class TokenizerMapper
>>>>        extends Mapper<Object, Text, Text, IntWritable>{
>>>>     private final static IntWritable one = new IntWritable(1);
>>>>     private Text word = new Text();
>>>>     public void map(Object key, Text value, Context context
>>>>                     ) throws IOException, InterruptedException {
>>>>       StringTokenizer itr = new StringTokenizer(value.toString());
>>>>       while (itr.hasMoreTokens()) {
>>>>         word.set(itr.nextToken());
>>>>         context.write(word, one);
>>>>       }
>>>>     }
>>>>   }
>>>>   public static class IntSumReducer
>>>>        extends Reducer<Text,IntWritable,Text,IntWritable> {
>>>>     private IntWritable result = new IntWritable();
>>>>     public void reduce(Text key, Iterable<IntWritable> values,
>>>>                        Context context
>>>>                        ) throws IOException, InterruptedException {
>>>>       int sum = 0;
>>>>       for (IntWritable val : values) {
>>>>         sum += val.get();
>>>>       }
>>>>       result.set(sum);
>>>>       context.write(key, result);
>>>>     }
>>>>   }
>>>>   private static void usage() throws IOException {
>>>>     System.err.println("teragen <num rows> <output dir>");
>>>>   }
>>>>   public int run(String[] args) throws IOException,
>>>> InterruptedException,
>>>> ClassN
>>>> otFoundException {
>>>>         Job job = Job.getInstance(getConf());
>>>>         if (args.length != 2) {
>>>>               usage();
>>>>               return 2;
>>>>         }
>>>>         job.setJobName("wordcount");
>>>>         job.setJarByClass(WordCount.class);
>>>>         job.setMapperClass(TokenizerMapper.class);
>>>>         job.setCombinerClass(IntSumReducer.class);
>>>>         job.setReducerClass(IntSumReducer.class);
>>>>         job.setOutputKeyClass(Text.class);
>>>>         job.setOutputValueClass(IntWritable.class);
>>>>         FileInputFormat.addInputPath(job, new Path(args[0]));
>>>>         FileOutputFormat.setOutputPath(job, new Path(args[1]));
>>>>         return job.waitForCompletion(true) ? 0 : 1;
>>>>   }
>>>>   public static void main(String[] args) throws Exception {
>>>>         int res = ToolRunner.run(new Configuration(), new WordCount(),
>>>> args);
>>>>         System.exit(res);
>>>>   }
>>>> }
>>>> [root@CHBM224 myMR]# javac -cp
>>>> '/usr/lib/hadoop/*:/usr/lib/hadoop-mapreduce/*' -d ../test WordCount.java
>>>> [root@CHBM224 myMR]#  hadoop ../test/WordCount
>>>> Error: Could not find or load main class ...test.WordCount
>>>>
>>>
>>>
>>
>

Reply via email to