2017-05-03 4 views
0
package com.delhi; 

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

public class UppercaseDriver extends Configured implements Tool { 

    public int run(String[] args) throws Exception{ 
     if(args.length !=2){ 
      System.out.printf("Two parameters are required- <input dir> <output dir>n"); 
     return -1;} 


    Configuration conf = new Configuration(); 
    Job job=Job.getInstance(conf); 
    job.setJobName("uppercase"); 
    job.setJarByClass(UppercaseDriver.class); 
    job.setMapperClass(UpperCaseMapper.class); 
    job.setReducerClass(UpperCaseReduce.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(LongWritable.class); 
    FileInputFormat.setInputPaths(job,new Path(args[0])); 
    FileOutputFormat.setOutputPath(job,new Path(args[1])); 
    //job.setNumReduceTasks(1); 
    boolean success = job.waitForCompletion(true); 
    return success ?0:1; 
    } 
    public static void main(String[] args) throws Exception { 
     int exitcode = ToolRunner.run(new UppercaseDriver(), args); 
     System.exit(exitcode); 
    } 

} 

これはドライバプログラムです。次減速機はmapreduceワードカウントプログラムでドライバから呼び出されていません

は減速プログラムです:

package com.delhi; 

import java.io.IOException; 

import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Reducer; 

public class UpperCaseReduce extends Reducer< Text,LongWritable, Text, LongWritable>{ 



    public void reduce(Text key, Iterable<LongWritable> value, 
     org.apache.hadoop.mapreduce.Reducer.Context context) 
     throws IOException, InterruptedException { 

     int sum=0; 
     System.out.println("how +++++++++++++++++" + key); 
     for(LongWritable st: value){ 
      sum = (int) (sum + st.get()); 

     } 
     System.out.println("how +++++++++++++++++" + key); 
    context.write(key, new LongWritable(sum)); 
} 

} 

は、次のマッパープログラムである:

package com.delhi; 

import java.io.IOException; 

import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Mapper; 

public class UpperCaseMapper extends Mapper<Object, Text, Text, LongWritable>{ 

@Override 
protected void map(Object key, Text value, 
     org.apache.hadoop.mapreduce.Mapper.Context context) 
     throws IOException, InterruptedException { 
    String line = value.toString(); 
    String arr[] = line.split(" "); 
    System.out.println("hello++++++++++++++++++++++++++++"); 
    for(String st: arr){ 
    //context.write(new Text(st.toUpperCase().trim()),new LongWritable(1)); 
    context.write(new Text(st),new LongWritable(1)); 
    } 
} 
} 

すでに問題outputkeyclassとoutputvalueclassこのタイプの減速機と一致する必要がありますことを、私はそれを見つけるのソリューションを存在するから私はその部分を適切にタケコアしていると思う。私の事例@削減のためのオーバーライドは機能していない。私はハープトップ7.2.3を使用している。私もトリム機能を使用しようとしています。問題は、単語カウントは起こっていません。私は出力ファイルの任意の単語に対して "単語1"だけを与えています。 私は別の問題から始め、このように終わった。助けてください。おかげさまで

+0

あなたの質問が何であるかを実際に試してみてください。エラーが発生していますか?減速機が作動しているかどうか? 1つの質問をして、問題点を明確にしてください。 –

+0

お返事ありがとうございます。私はこの出力を取得しています:シンプルなワードカウントはなぜworking.My質問ではありませんが、1 は1 だから1 である1 1つの ファイル1つの ファイル1 FILE1 1 を1 のためにあるのですか?私は減速機が動作していないと思う。 – Angshusuri

+0

質問を編集して読みやすくしてください。問題から始めて、コードを投稿して、希望する詳細を追加します。以前のコメントを質問の一部として追加します。 – vefthym

答えて

0

あなたreduce方法に@Override注釈を追加するのであれば、あなたはエラーを取得する:

Method does not override method from its superclass

ですから、メソッドのシグネチャがReducerに1と一致しない問題を抱えています。

あなたが持っている:

public void reduce(Text key, Iterable<LongWritable> value, 
        org.apache.hadoop.mapreduce.Reducer.Context context) 

あなたはそれを変更する場合:

public void reduce(Text key, Iterable<LongWritable> value, Context context) 

エラーが消えます。 reduceメソッドが呼び出されていないメソッドをオーバーライドしていないため、出力に一致するIDを使用していました。

+0

ありがとう。それは働いている。 – Angshusuri

関連する問題