【问题标题】:Hadoop not able to run programHadoop无法运行程序
【发布时间】:2013-06-19 05:36:38
【问题描述】:

嗨,这是我第一个使用 hadoop 的程序,我修改了 wordcount 程序。我无法执行这个程序。我已将地图输出和减速器输入更改为<text text>。输入文件包含记录为email gender age 21。执行挂起,显示Map 100% Reduce 100%。

//MAPPER
public class WordMapper extends MapReduceBase implements
    Mapper<LongWritable, Text, Text, Text> {

  @Override
  public void map(LongWritable key, Text value,
      OutputCollector<Text, Text> output, Reporter reporter)
      throws IOException {
    String s = value.toString();
    String s1;
    Matcher m2;
    FileSplit filesplit = (FileSplit) reporter.getInputSplit();
    String fileName = filesplit.getPath().getName();

    Pattern p1 = Pattern.compile("\\s+email\\s+gender\\s+age\\s+(\\S+)$");
    m2=p1.matcher(s);
    if (m2.find()){
        s1 = m2.replaceFirst("omitted");
        output.collect(new Text(s1), new Text(fileName));
    }
  }
}

    //REDUCER
public class SumReducer extends MapReduceBase implements
    Reducer<Text, Text, Text, IntWritable> {

  @Override
  public void reduce(Text key, Iterator<Text> values,
      OutputCollector<Text, IntWritable> output, Reporter reporter)
      throws IOException {

    int cliCount = 0;
    while (values.hasNext()) {
      cliCount += 1;
    }
    output.collect(key, new IntWritable(cliCount));
  }
}

    //MAIN
public class WordCount extends Configured implements Tool {

  @Override
  public int run(String[] args) throws Exception {

    if (args.length != 2) {
      System.out.printf(
          "Usage: %s [generic options] <input dir> <output dir>\n", getClass()
              .getSimpleName());
      ToolRunner.printGenericCommandUsage(System.out);
      return -1;
    }

    JobConf conf = new JobConf(getConf(), WordCount.class);
    conf.setJobName(this.getClass().getName());

    FileInputFormat.setInputPaths(conf, new Path(args[0]));
    FileOutputFormat.setOutputPath(conf, new Path(args[1]));

    conf.setMapperClass(WordMapper.class);
    conf.setReducerClass(SumReducer.class);

    conf.setMapOutputKeyClass(Text.class);
    conf.setMapOutputValueClass(Text.class);

    conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(IntWritable.class);

    JobClient.runJob(conf);
    return 0;
  }

  public static void main(String[] args) throws Exception {
    int exitCode = ToolRunner.run(new WordCount(), args);
    System.exit(exitCode);
  }
}

更新: 仅在 _log 文件夹内 .xml 文件存在

我一直在执行程序,hadoop 杀死了它。

3/06/19 15:02:47 INFO mapred.JobClient:     Total committed heap usage (bytes)=258875392
13/06/19 15:02:47 INFO mapred.JobClient:   org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter
13/06/19 15:02:47 INFO mapred.JobClient:     BYTES_READ=26
13/06/19 15:02:47 INFO mapred.JobClient: Job Failed: NA
Exception in thread "main" java.io.IOException: Job failed!
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1322)
    at WordCount.run(WordCount.java:41)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at WordCount.main(WordCount.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:208)

【问题讨论】:

  • 您没有在输出目录中获取 part-r-0001 文件吗??
  • 没有。输出挂在13/06/19 14:17:00 INFO mapred.JobClient: map 100% reduce 0% 13/06/19 14:17:09 INFO mapred.JobClient: map 100% reduce 100% 。我必须使用ctrl+c 来中断执行。这个文件clioutput/_temporary/_attempt_201306191122_0002_r_000000_0/part-00000 也是空的。
  • 你也可以粘贴你的日志文件吗
  • 我已经更新了这个问题。 clioutput/_logs/history/localhost_1371655349840_job_201306191122_0004_conf.xml 只存在 conf.xml 是否需要它的输出。
  • 从 IO Exception 中显示,可能是未读取输入文件。您确定输入文件存在于 HDFS 上并且是可读的。我会先写一个简单的代码来确保我可以读取输入文件

标签: java hadoop


【解决方案1】:

我遇到了减速器的问题。由于错误的实现,迭代器没有继续前进。

    while (values.hasNext()) {
      cliCount += 1;
      //values.next(); This was missing. Adding this runs the code perfectly.
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多