Hadoop-WordCount的结果未写入输出文件

Hadoop-WordCount的结果未写入输出文件,hadoop,mapreduce,Hadoop,Mapreduce,我正在尝试运行一个程序,通过以下链接中给出的步骤,计算单词的数量和频率: 我加载了一个名为input的目录,其中包括三个文本文件 我能够正确地配置一切。现在,当运行WordCount.java时,我在输出目录中的part-00000文件中没有看到任何内容 Mapper的java代码是: import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.io.IntWritable; im

我正在尝试运行一个程序,通过以下链接中给出的步骤,计算单词的数量和频率:

我加载了一个名为input的目录,其中包括三个文本文件

我能够正确地配置一切。现在,当运行WordCount.java时,我在输出目录中的part-00000文件中没有看到任何内容

Mapper的java代码是:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;

public class WordCountMapper extends MapReduceBase
implements Mapper<LongWritable, Text, Text, IntWritable> {

private final IntWritable one = new IntWritable(1);
private Text word = new Text();

public void map(WritableComparable key, Writable value,
  OutputCollector output, Reporter reporter) throws IOException {

String line = value.toString();
StringTokenizer itr = new StringTokenizer(line.toLowerCase());
while(itr.hasMoreTokens()) {
  word.set(itr.nextToken());
  output.collect(word, one);
}
}

@Override
public void map(LongWritable arg0, Text arg1,
    OutputCollector<Text, IntWritable> arg2, Reporter arg3)
     throws IOException {
// TODO Auto-generated method stub

 }

}
在控制台中,我得到以下日志:

13/09/10 10:09:20 WARN mapred.JobClient: Use GenericOptionsParser for parsing the       arguments. Applications should implement Tool for the same.
13/09/10 10:09:20 INFO mapred.FileInputFormat: Total input paths to process : 3
13/09/10 10:09:20 INFO mapred.FileInputFormat: Total input paths to process : 3
13/09/10 10:09:20 INFO mapred.JobClient: Running job: job_201309100855_0012
13/09/10 10:09:21 INFO mapred.JobClient:  map 0% reduce 0%
13/09/10 10:09:25 INFO mapred.JobClient:  map 25% reduce 0%
13/09/10 10:09:26 INFO mapred.JobClient:  map 75% reduce 0%
13/09/10 10:09:27 INFO mapred.JobClient:  map 100% reduce 0%
13/09/10 10:09:35 INFO mapred.JobClient: Job complete: job_201309100855_0012
13/09/10 10:09:35 INFO mapred.JobClient: Counters: 15
13/09/10 10:09:35 INFO mapred.JobClient:   File Systems
13/09/10 10:09:35 INFO mapred.JobClient:     HDFS bytes read=54049
13/09/10 10:09:35 INFO mapred.JobClient:     Local bytes read=14
13/09/10 10:09:35 INFO mapred.JobClient:     Local bytes written=214
13/09/10 10:09:35 INFO mapred.JobClient:   Job Counters 
13/09/10 10:09:35 INFO mapred.JobClient:     Launched reduce tasks=1
13/09/10 10:09:35 INFO mapred.JobClient:     Launched map tasks=4
13/09/10 10:09:35 INFO mapred.JobClient:     Data-local map tasks=4
13/09/10 10:09:35 INFO mapred.JobClient:   Map-Reduce Framework
13/09/10 10:09:35 INFO mapred.JobClient:     Reduce input groups=0
13/09/10 10:09:35 INFO mapred.JobClient:     Combine output records=0
13/09/10 10:09:35 INFO mapred.JobClient:     Map input records=326
13/09/10 10:09:35 INFO mapred.JobClient:     Reduce output records=0
13/09/10 10:09:35 INFO mapred.JobClient:     Map output bytes=0
13/09/10 10:09:35 INFO mapred.JobClient:     Map input bytes=50752
13/09/10 10:09:35 INFO mapred.JobClient:     Combine input records=0
13/09/10 10:09:35 INFO mapred.JobClient:     Map output records=0
13/09/10 10:09:35 INFO mapred.JobClient:     Reduce input records=0
我是Hadoop的新手

请用适当的答复


谢谢。

您的Mapper类中有两个
map
方法。带有
@Override
注释的方法实际上被重写,而该方法不做任何事情。因此,没有任何东西从映射器中出来,也没有任何东西进入减速器,因此没有输出


删除用
@Override
注释标记的
map
方法,并用
@Override
标记第一个
map
方法。然后修复任何方法签名问题,它应该可以工作。

在Mapper类中有两个
map
方法。带有
@Override
注释的方法实际上被重写,而该方法不做任何事情。因此,没有任何东西从映射器中出来,也没有任何东西进入减速器,因此没有输出


删除用
@Override
注释标记的
map
方法,并用
@Override
标记第一个
map
方法。然后修复任何方法签名问题,它就会工作。

我也遇到了同样的问题。我通过删除重写的map方法并将map方法的签名更改为第一个参数为
LongWritable
,解决了这个问题。更新映射方法签名,如下所示:

@Override
public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) 
    throws IOException {

我也面临同样的问题。我通过删除重写的map方法并将map方法的签名更改为第一个参数为
LongWritable
,解决了这个问题。更新映射方法签名,如下所示:

@Override
public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) 
    throws IOException {

你能给我看一下你的代码吗?你的工作是读取输入,但它没有发出任何东西。@Tariq我已经编辑了这个问题。请看一看。删除第二个map(),然后重新运行作业。我还建议你使用新的API。你能给我看一下你的代码吗?你的工作是读取输入,但它没有发出任何东西。@Tariq我已经编辑了这个问题。请看一看。删除第二个map(),然后重新运行作业。我还建议您使用新的API。我应该得到每个单词及其频率,但第00000部分只显示了一些数字和频率。大多数情况下,1表示频率。我应该得到每个单词及其频率,但第00000部分只显示了一些数字和频率。大多数情况下,频率为1。
@Override
public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) 
    throws IOException {