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
주석을 추가 할 경우
정말 열심히 귀하의 질문이 무엇인지 알아 내려고 노력하고 있습니다. 오류가 있습니까? 감속기가 작동하는지 여부 한 가지 질문을하고 문제가 무엇인지 명확히하십시오. –
답변 해 주셔서 감사합니다. 나는이 출력을 얻고있다 : 간단한 단어 개수 왜 working.My 질문하지, 1 그래서 1 이다 1 1 개 파일 1 개 파일 1 파일 1 1 입니다? 나는 감속기가 작동하지 않는 것 같아요. – Angshusuri
가독성을 높이기 위해 질문을 편집하십시오. 문제부터 시작하여 코드를 게시 한 다음 원하는 세부 정보를 추가하십시오. 이전 의견을 질문의 일부로 추가하십시오. – vefthym