여러분! 나는 이클립스에서 하둡에 대한 프로그램을 가지고 있고, 소스 코드는 다음과 같습니다다음으로 내 hadoop 프로그램을 처리 할 수없는 이유는 무엇입니까?
public class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while(itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
for(IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public class WordCount {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] oargs = new GenericOptionsParser(conf, args).getRemainingArgs();
if(oargs.length != 2) {
System.err.println("Usage: word count <in> <out>");
}
System.out.println("input: "+oargs[0]);
System.out.println("output: "+oargs[1]);
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(oargs[0]));
FileOutputFormat.setOutputPath(job, new Path(oargs[1]));
System.out.println("==============================");
System.out.println("start ...");
boolean flag = job.waitForCompletion(true);
System.out.println(flag);
System.out.println("end ...");
System.out.println("==============================");
}
}
결과는 로그를 참조하십시오된다
[email protected] /cygdrive/f/develop/hadoop/hadoop-1.0.3
$ ./bin/hadoop jar ./jar/wordcount.jar /tmp/input /tmp/output
input: /tmp/input
output: /tmp/output
==============================
start ...
12/07/25 14:59:17 INFO input.FileInputFormat: Total input paths to process : 2
12/07/25 14:59:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12/07/25 14:59:17 WARN snappy.LoadSnappy: Snappy native library not loaded
12/07/25 14:59:17 INFO mapred.JobClient: Running job: job_201207251447_0001
12/07/25 14:59:18 INFO mapred.JobClient: map 0% reduce 0%
가 로그에 가서 영원히 멈추지되지 않습니다 . 왜?
Windows XP 시스템에서 cygwin 소프트웨어로 로컬 모드에서 코드를 실행하고 있습니다.
"다음에 수행"이란 의미는 무엇입니까? 당신이해야 할 일은 무엇입니까? 일반적으로 클러스터가이 작업을 처리하고 다시 돌아올 때까지 기다려야합니다. 이는 waitForCompletion의 의미입니다. 작업이 성공적이지 않은 경우 JVM이 존재합니다. –
실행해야하는 2 가지 맵 작업 중 하나의 작업 로그를 게시 할 수 있습니까? 당신은 job tracker web ui, http : // localhost : 50030 –