задание mapreduce не выполняется с LocalJobRunner

1

Привет, ребята, это может показаться маленьким детским вопросом, но я новичок в mapreduce

Я выполнял задание mapreduce, и у меня есть некоторые инструкции sysout на карте и уменьшаю стороны, чтобы увидеть, что происходит на карте и уменьшить стороны, но после завершения задания job.waitForCompletion() возвращает false и не удалось выполнить работу

Я попытался отладить его, но не нашел ничего подозрительного, поэтому разместил здесь код

CustomKey.java

package com.example.secondarysort;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;

public class CustomKey {
    Text key = new Text();
    IntWritable value = new IntWritable();

    public void set(Text key,IntWritable value){
        this.key = key;
        this.value = value;
    }

    public Text getKey(){
        return this.key;
    }

    public IntWritable getValue(){
        return this.value;
    }
}



SSDriver.java

package com.example.secondarysort;

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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;


public class SSDriver {

    private static class SSMapper extends Mapper<LongWritable, Text, CustomKey,NullWritable>{

        CustomKey customKey = new CustomKey();
        @Override
        public void map(LongWritable key, Text value,Context context)
                throws IOException, InterruptedException {
            System.out.println(value);
            StringTokenizer tokens = new StringTokenizer(value.toString());
            customKey.set(new Text(tokens.nextToken()), new IntWritable(Integer.parseInt(tokens.nextToken())));
            context.write(customKey, NullWritable.get());
        }

    }

    private static class SSReducer extends Reducer<CustomKey, NullWritable, Text, IntWritable>{

        @Override
        public void reduce(CustomKey key, Iterable<NullWritable> values,Context context)
                throws IOException, InterruptedException {
            System.out.println(key.getKey()+" "+key.getValue());
            context.write(key.getKey(), key.getValue());
        }
    }

    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "secondary_sort");

        job.setJarByClass(SSDriver.class);

        job.setMapperClass(SSMapper.class);
        job.setReducerClass(SSReducer.class);

        job.setMapOutputKeyClass(CustomKey.class);
        job.setMapOutputValueClass(NullWritable.class);

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

        TextInputFormat.addInputPath(job, new Path("data/data.txt"));
        TextOutputFormat.setOutputPath(job, new Path("data/output"));

        try {
            System.out.println(job.waitForCompletion(true));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    Что журнал сообщает о любых исключениях ошибок? Проверьте папку $ HADOOP_HOME / logs на наличие журналов?
  • 0
    1. у меня не настроен hadoop в моей локальной системе 2. работа будет выполняться localjobrunner
Показать ещё 2 комментария
Теги:
hadoop
mapreduce

1 ответ

0

Проблема в том, что вы используете пользовательский ключ CustomKey который не реализует WritableComparable интерфейс.
Обязательно, чтобы ваш пользовательский ключ реализовал его и предоставил определение для двух методов, таких как write() и readFields(). Важно также переопределить hashCode(). Вы можете ссылаться на этот фрагмент кода для справки здесь
Надеюсь, поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню