2015-10-09 3 views
0

Я получил следующее exception при попытке выполнить hadoopmapreduce.Hadoop mapreduce-java.io.IOException: сбой задания

java.io.IOException: Job failed! на org.apache.hadoop.mapred.JobClient.runJob (JobClient.java:865) в com.vasa.books.BookDriver.main (BookDriver.java:37)

BookDriver.java

package com.vasa.books; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.FileInputFormat; 
import org.apache.hadoop.mapred.FileOutputFormat; 
import org.apache.hadoop.mapred.JobClient; 
import org.apache.hadoop.mapred.JobConf; 
import org.apache.hadoop.mapred.TextInputFormat; 
import org.apache.hadoop.mapred.TextOutputFormat; 

public class BookDriver { 

    public static void main(String args[]) { 
     // TODO Auto-generated method stub 
     JobClient client=new JobClient(); 
     JobConf conf=new JobConf(com.vasa.books.BookDriver.class); 

     conf.setJobName("booknamefind"); 


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

     conf.setMapperClass(com.vasa.books.bookmapper.class); 
     conf.setReducerClass(com.vasa.books.bookreducer.class); 

     conf.setInputFormat(TextInputFormat.class); 
     conf.setOutputFormat(TextOutputFormat.class); 

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

     client.setConf(conf); 
     try{ 
     JobClient.runJob(conf); 
     }catch(Exception e){ 
     e.printStackTrace(); 
     } 

    } 
} 

BookMapper.java

package com.vasa.books; 

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.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 BookMapper extends MapReduceBase implements Mapper<LongWritable,Text,Text,IntWritable> { 
    private final static IntWritable one=new IntWritable(1); 
    public void map(LongWritable _key, Text value, 
      OutputCollector<Text, IntWritable> output, Reporter reporter) 
      throws IOException { 
     // TODO Auto-generated method stub 
     String Tempstring=value.toString(); 
     String[] singlebookdata=Tempstring.split("\",\""); 
     output.collect(new Text(singlebookdata[3]), one); 


    } 

} 

почему происходит это исключение?

+0

Можете ли вы показать свои аргументы? – Patrick

+0

@patrick В конфигурациях запуска я приводил следующие аргументы в качестве ввода и вывода ** BX-Books.txt out_file ** – vasanth

+0

Проверьте правильность пути к этому файлу. В вашем аргументе путь должен быть точно там, где хранится файл. – Patrick

ответ

1

Согласно источнику JobClient, JobClient.runJob() вызывает JobClient.monitorAndPrintJob(), который возвращает логическое значение. Если это логическое значение является ложным (это означает, что задание не удалось), он печатает это бесполезное сообщение об ошибке «что-то не удалось!» что вы видите.

Чтобы решить эту проблему у вас есть два варианта:

1 - (Faster) Проверьте журналы. Информация об ошибке RunningJob должна печататься в журналах.

2 - Если вы не знаете, где находятся журналы, не активизируйте ведение журнала или не хотите, чтобы вам приходилось копать журналы, вы могли бы переписать немного своего кода. Вместо того, чтобы использовать JobClient.runJob(), я бы сделал эквивалент того, что делает runJob() в вашем коде, чтобы при его сбое вы получили полезное сообщение об ошибке.

public static RunningJob myCustomRunJob(JobConf job) throws Exception { 
    JobClient jc = new JobClient(job); 
    RunningJob rj = jc.submitJob(job); 
    if (!jc.monitorAndPrintJob(job, rj)) { 
     throw new IOException("Job failed with info: " + rj.getFailureInfo()); 
    } 
    return rj; 
    } 

Я думаю, основная проблема в том, что либо Arg [0] или Arg [1] (ваш вход или выходные файлы) не были найдены.

+0

спасибо за ур предложение @ aguibert, finaly Я нашел исключение было связано с тем, как я разбил текстовый файл в BookMapper.java – vasanth