2014-08-29 29 views
-1

什麼包這3個項目??? 如何將這3個程序合併成一個程序? 如何在eclipse中使用這3個程序做mapreduce?MapReduce的包錯誤

請幫我運行該程序成功

操作系統:Linux

面對異常:

  1. 方法TryParseInt(字符串)是未定義的類型 MaxPYear.MaxPubYearReducer
在 第t

2.方法setInputFormatClass(類) YPE工作是不適用的參數 (類)

映射器代碼:

public static class MaxPubYearMapper extends Mapper<LongWritable , Text, IntWritable,Text> 
    { 
     public void map(LongWritable key, Text value , Context context) 

       throws IOException, InterruptedException 
       { 
      String delim = "\t"; 
      Text valtosend = new Text(); 
      String tokens[] = value.toString().split(delim); 
      if (tokens.length == 2) 
      { 
       valtosend.set(tokens[0] + ";"+ tokens[1]); 
       context.write(new IntWritable(1), valtosend); 
      } 

       }  
    } 

減速器代號:

public static class MaxPubYearReducer extends Reducer<IntWritable ,Text, Text, IntWritable> 
    { 

     public void reduce(IntWritable key, Iterable<Text> values , Context context) throws IOException, InterruptedException 
     { 
      int maxiValue = Integer.MIN_VALUE; 
      String maxiYear = ""; 
      for(Text value:values)   { 
       String token[] = value.toString().split(";"); 
       if(token.length == 2 && TryParseInt(token[1]).intValue()> maxiValue) 
       { 
        maxiValue = TryParseInt(token[1]); 
        maxiYear = token[0]; 
       } 
      } 
      context.write(new Text(maxiYear), new IntWritable(maxiValue)); 
     } 
    } 

驅動程序代碼:

public static void main(String[] args) throws Exception { 
     Configuration conf = new Configuration(); 
     Job job = new Job(conf , "Frequency`enter code here`"); 
     job.setJarByClass(MaxPubYear.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 

     job.setMapperClass(FrequencyMapper.class); 
     job.setCombinerClass(FrequencyReducer.class); 
     job.setReducerClass(FrequencyReducer.class); 


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

     FileInputFormat.addInputPath(job,new Path(args[0])); 
     FileOutputFormat.setOutputPath(job,new Path(args[1]+ "_temp")); 
     int exitCode = job.waitForCompletion(true)?0:1; 

     if (exitCode == 0) 
     { 
      Job SecondJob = new Job(conf, "Maximum Publication year"); 
      SecondJob.setJarByClass(MaxPubYear.class); 

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

      SecondJob.setMapOutputKeyClass(IntWritable.class); 
      SecondJob.setMapOutputValueClass(Text.class); 

      SecondJob.setMapperClass(MaxPubYearMapper.class);    
      SecondJob.setReducerClass(MaxPubYearReducer.class); 

      FileInputFormat.addInputPath(SecondJob,new Path(args[1]+ "_temp")); 
      FileOutputFormat.setOutputPath(SecondJob,new Path(args[1])); 
      System.exit(SecondJob.waitForCompletion(true)?0:1);     

     } 
    } 
+0

我不確定你的問題是什麼:標題提到一個錯誤:我們在談論什麼錯誤? – ljgw 2014-08-29 11:11:59

+0

我想將上面的3個代碼寫入一個程序並創建一個jar文件。我不知道該怎麼做,需要什麼軟件包。 – Apk 2014-09-02 05:56:52

回答

0

只是寫他們聚集在一類

所需的軟件包是:

package org.myorg; 

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.util.*; 
import java.io.DataInput; 
import java.io.DataOutput; 

可能會有一些額外的在這裏,因爲我複製他們從我的代碼。

package org.myorg; 

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.util.*; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.io.DataInput; 
import java.io.DataOutput; 
import java.io.IOException; 

public class <your classname as well as filename> { 
    public static class MaxPubYearMapper extends Mapper<LongWritable , Text, IntWritable,Text> 
    { 
     public void map(LongWritable key, Text value , Context context) 

       throws IOException, InterruptedException 
       { 
      String delim = "\t"; 
      Text valtosend = new Text(); 
      String tokens[] = value.toString().split(delim); 
      if (tokens.length == 2) 
      { 
       valtosend.set(tokens[0] + ";"+ tokens[1]); 
       context.write(new IntWritable(1), valtosend); 
      } 

       }  
    } 

    public static class MaxPubYearReducer extends Reducer<IntWritable ,Text, Text, IntWritable> 
    { 

     public void reduce(IntWritable key, Iterable<Text> values , Context context) throws IOException, InterruptedException 
     { 
      int maxiValue = Integer.MIN_VALUE; 
      String maxiYear = ""; 
      for(Text value:values)   { 
       String token[] = value.toString().split(";"); 
       if(token.length == 2 && TryParseInt(token[1]).intValue()> maxiValue) 
       { 
        maxiValue = TryParseInt(token[1]); 
        maxiYear = token[0]; 
       } 
      } 
      context.write(new Text(maxiYear), new IntWritable(maxiValue)); 
     } 
    } 
    public static void main(String[] args) throws Exception { 
     Configuration conf = new Configuration(); 
     Job job = new Job(conf , "Frequency`enter code here`"); 
     job.setJarByClass(MaxPubYear.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 

     job.setMapperClass(FrequencyMapper.class); 
     job.setCombinerClass(FrequencyReducer.class); 
     job.setReducerClass(FrequencyReducer.class); 


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

     FileInputFormat.addInputPath(job,new Path(args[0])); 
     FileOutputFormat.setOutputPath(job,new Path(args[1]+ "_temp")); 
     int exitCode = job.waitForCompletion(true)?0:1; 

     if (exitCode == 0) 
     { 
      Job SecondJob = new Job(conf, "Maximum Publication year"); 
      SecondJob.setJarByClass(MaxPubYear.class); 

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

      SecondJob.setMapOutputKeyClass(IntWritable.class); 
      SecondJob.setMapOutputValueClass(Text.class); 

      SecondJob.setMapperClass(MaxPubYearMapper.class);    
      SecondJob.setReducerClass(MaxPubYearReducer.class); 

      FileInputFormat.addInputPath(SecondJob,new Path(args[1]+ "_temp")); 
      FileOutputFormat.setOutputPath(SecondJob,new Path(args[1])); 
      System.exit(SecondJob.waitForCompletion(true)?0:1);     

     } 
    } 
} 
+0

Antariksha嗨,是新來的Java,我發現很難將所有三個碼組合成一個...你能告訴我怎麼把它們全部集中在一個班? – Apk 2014-09-02 05:53:54

+0

編輯了我的答案。還需要添加jar文件hadoop-core - *。jar到類路徑 – 2014-09-02 06:30:15

+0

是antariksha我已經添加了外部jar也 – Apk 2014-09-02 07:58:42

相關問題