I wrote a mapreduce program which need to use proto buf for parsing.the program 
is list below:


import com.baidu.mirror.CommonCollectorOuterClass.*;
import com.baidu.mirror.*;
import java.io.IOException;
import java.util.*;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.mapred.lib.*;
import org.apache.hadoop.util.*;

public class PvStat {

   public static class Map extends MapReduceBase implements 
Mapper<LongWritable, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text ip = new Text();

        public void map(LongWritable key, Text value, OutputCollector<Text, 
IntWritable> output, Reporter reporter) throws IOException {
                System.out.println("value is : " + value);
        byte[] rawData = value.getBytes();
        CommonCollector cc = null;
        try{
            cc = CommonCollector.parseFrom(rawData);
        }catch(Exception e){ 
            e.printStackTrace();
        }   
        ip.set(cc.getMachineIp());
        output.collect(ip,one);   
    }
   }

   public static class Reduce extends MapReduceBase implements Reducer<Text, 
IntWritable, Text, IntWritable> {
    private IntWritable totalCount = new IntWritable();
  
        public void reduce(Text key, Iterator<IntWritable> values, 
OutputCollector<Text, IntWritable> output, Reporter reporter) throws 
IOException{
        int count = 0;
        while (values.hasNext()) {
            count += values.next().get();
        }   
        totalCount.set(count);
        output.collect(key, totalCount);
    } 
   }

   public static void main(String[] args) throws Exception {

     // only headle one file once, Aug 7,2015
     String inputPath = args[0];
     String outputPath = args[1];

     JobConf conf = new JobConf(PvStat.class);
     conf.setJobName("PvStat");
         conf.setNumReduceTasks(1);

     conf.setOutputKeyClass(Text.class);
     conf.setOutputValueClass(IntWritable.class);

     conf.setMapperClass(Map.class);
     conf.setReducerClass(Reduce.class);

     conf.setInputFormat(NLineInputFormat.class);
     conf.setOutputFormat(TextOutputFormat.class);

     FileInputFormat.setInputPaths(conf, new Path(inputPath));
     FileOutputFormat.setOutputPath(conf, new Path(outputPath));

     JobClient.runJob(conf);
   }
}


BTW,my proto buf version is 2.6.1.And the file what I need to parse is put by 
myself also deal with same version.But I don't know which version hadoop use(I 
think it shouldn't effect the result).


the detail of error like :


java.lang.VerifyError: class 
com.baidu.mirror.CommonCollectorOuterClass$CommonCollector overrides final 
method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at PvStat$Map.map(PvStat.java:23)
        at PvStat$Map.map(PvStat.java:14)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:63)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:381)
        at org.apache.hadoop.mapred.Child.main(Child.java:212)



I couldn't find solution and have to ask for help.

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to