2017-05-03 1 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); 
    } 

} 

이것은 드라이버 프로그램입니다. (가) 이미 내가 문제 outputkeyclass 및 outputvalueclass 이런 종류의 감속기와 일치해야 그것을 알아 솔루션을 존재에서감속기가 mapreduce 단어 계산 프로그램의 드라이버에 의해 호출되지 않음

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)); 
    } 
} 
} 

: 다음 매퍼 프로그램이

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)); 
} 

} 

입니다 : 다음

는 감속기 프로그램입니다 . 나는 그 부분을 적절히 다루었다고 생각한다. 나의 경우 @ 축소에 대한 대가가 효과적이지 않다. 나는 hadoop 7.2.3을 사용하고있다. 나는 또한 trim 함수를 사용하려고합니다. 문제는 단어 수는 일어나지 않습니다. 나는 출력 파일의 모든 단어에 대해서만 "단어 1"만을 제공합니다. 다른 문제로 시작했는데 이렇게 끝났습니다. 제발 도와주세요. 감사합니다. . 당신이 당신의 reduce 방법에 @Override 주석을 추가 할 경우

+0

정말 열심히 귀하의 질문이 무엇인지 알아 내려고 노력하고 있습니다. 오류가 있습니까? 감속기가 작동하는지 여부 한 가지 질문을하고 문제가 무엇인지 명확히하십시오. –

+0

답변 해 주셔서 감사합니다. 나는이 출력을 얻고있다 : 간단한 단어 개수 왜 working.My 질문하지, 1 그래서 1 이다 1 1 개 파일 1 개 파일 1 파일 1 1 입니다? 나는 감속기가 작동하지 않는 것 같아요. – Angshusuri

+0

가독성을 높이기 위해 질문을 편집하십시오. 문제부터 시작하여 코드를 게시 한 다음 원하는 세부 정보를 추가하십시오. 이전 의견을 질문의 일부로 추가하십시오. – vefthym

답변

0

그래서 오류를 얻을 :

Method does not override method from its superclass

그래서 당신이 메서드 서명이 Reducer에서 일치하지 않는 문제가 있습니다.

당신은이 :

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

관련 문제