AWS EMR Step завершился неудачно из-за сбоев созданных им рабочих мест

Я пытаюсь проанализировать набор данных представления статей Википедии с помощью Amazon EMR. Этот набор данных содержит статистику просмотров страниц за трехмесячный период (1 января 2011 г. - 31 марта 2011 г.). Я пытаюсь найти статью с наибольшим количеством просмотров за это время. Вот код, который я использую:

public class mostViews {

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

    private final static IntWritable views = new IntWritable(1);
    private Text article = new Text();

    public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {

        String line = value.toString();

        String[] words = line.split(" ");
        article.set(words[1]);
        views.set(Integer.parseInt(words[2]));
        output.collect(article, views);
    }
}

public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {

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

        int sum = 0;

        while (values.hasNext()) 
        {
            sum += values.next().get();
        }
        output.collect(key, new IntWritable(sum));
    }
}

public static void main(String[] args) throws Exception {
    JobConf conf = new JobConf(mostViews.class);
    conf.setJobName("wordcount");

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

    conf.setMapperClass(Map.class);
    conf.setCombinerClass(Reduce.class);
    conf.setReducerClass(Reduce.class);

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

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

    JobClient.runJob(conf);
}
}

Сам код работает, но когда я создаю кластер и добавляю настраиваемую банку, иногда он не работает, но иногда работает. Использование всего набора данных в качестве входных данных приводит к сбою, но при использовании одного месяца, например января, он завершается. После запуска с использованием всего набора данных я просмотрел файл журнала «контроллера» и обнаружил вот что, как мне кажется, имеет отношение к делу:

2015-03-10T11:50:12.437Z INFO Synchronously wait child process to complete :     hadoop jar /mnt/var/lib/hadoop/steps/s-22ZUAWNM...
2015-03-10T12:05:10.505Z INFO Process still running
2015-03-10T12:20:12.573Z INFO Process still running
2015-03-10T12:35:14.642Z INFO Process still running
2015-03-10T12:50:16.711Z INFO Process still running
2015-03-10T13:05:18.779Z INFO Process still running
2015-03-10T13:20:20.848Z INFO Process still running
2015-03-10T13:35:22.916Z INFO Process still running
2015-03-10T13:50:24.986Z INFO Process still running
2015-03-10T14:05:27.056Z INFO Process still running
2015-03-10T14:20:29.126Z INFO Process still running
2015-03-10T14:35:31.196Z INFO Process still running
2015-03-10T14:50:33.266Z INFO Process still running
2015-03-10T15:05:35.337Z INFO Process still running
2015-03-10T15:11:37.366Z INFO waitProcessCompletion ended with exit code 1 :     hadoop jar /mnt/var/lib/hadoop/steps/s-22ZUAWNM...
2015-03-10T15:11:40.064Z INFO Step created jobs: job_1425988140328_0001
2015-03-10T15:11:50.072Z WARN Step failed as jobs it created failed.     Ids:job_1425988140328_0001

Может ли кто-нибудь сказать мне, что происходит не так, и что я могу сделать, чтобы это исправить? Тот факт, что он работает в течение одного месяца, а не двух или трех месяцев, заставляет меня думать, что набор данных может быть слишком большим, но я не уверен. Я все еще новичок во всей этой вещи Hadoop / EMR, поэтому, если есть какая-то информация, которую я упустил, просто дайте мне знать. Мы будем благодарны за любую помощь или совет.

Заранее спасибо!


person spoon    schedule 30.03.2015    source источник
comment
Вы нашли решение?   -  person p.magalhaes    schedule 08.09.2015
comment
Не совсем так, я просто уменьшил размер набора данных, и тогда мне показалось, что это сработало. Однако я до сих пор не понимаю, почему это произошло.   -  person spoon    schedule 08.09.2015


Ответы (1)


Эти ошибки обычно возникают, когда вам не хватает места на HDFS (жестких дисках узла EMR) или в памяти.

Во-первых, я бы начал с попытки прочитать журналы, к которым вас направляет сообщение: "/ mnt / var / lib / hadoop / steps / s-22ZUAWNM ..."

Во-вторых, я бы попытался создать более крупный EMR (экземпляры EC2 с большим количеством дисков и ОЗУ или большим количеством основных экземпляров).

person Roee Gavirel    schedule 25.04.2017