Hadoop mapreduce: Драйвер для создания цепочек карт в задании MapReduce - PullRequest
8 голосов
/ 27 июля 2011

У меня есть работа на карте: Мой код Класс карты:

public static class MapClass extends Mapper<Text, Text, Text, LongWritable> {

    @Override
    public void map(Text key, Text value, Context context)
        throws IOException, InterruptedException {
    }
}

И я хочу использовать ChainMapper:

1. Job job = new Job(conf, "Job with chained tasks");
2. job.setJarByClass(MapReduce.class);
3. job.setInputFormatClass(TextInputFormat.class);
4. job.setOutputFormatClass(TextOutputFormat.class);

5. FileInputFormat.setInputPaths(job, new Path(InputFile));
6. FileOutputFormat.setOutputPath(job, new Path(OutputFile));

7. JobConf map1 = new JobConf(false);

8. ChainMapper.addMapper(
        job, 
        MapClass.class, 
        Text.class, 
        Text.class, 
        Text.class, 
        Text.class, 
        true, 
        map1
        ); 

но в отчете есть ошибка в строке 8:

Несколько маркеров на этой линии - Появление «addMapper» - метод addMapper (JobConf, Class>, Class, Class, Class, Class, boolean, JobConf) в типе ChainMapper не применим для аргументов (Job, Класс, Класс, Класс, Класс, Класс, логическое значение, Конфигурация) - Указатель отладочной текущей инструкции - метод addMapper (JobConf, Class>, Class, Class, Class, Class, boolean, JobConf) в типе ChainMapper не применим для аргументов (JobConf, класс, класс, класс, класс, класс, логическое значение, JobConf)

Ответы [ 4 ]

8 голосов
/ 06 мая 2012

После большого количества «кунг-фу» я смог использовать ChainMapper/ChainReducer.Благодарю за последний комментарий1012 * флаг в addMapper не нужен.(на самом деле подпись имеет подавление изменений).

Так что это будет просто

JobConf mapAConf = new JobConf(false);
ChainMapper.addMapper(conf, Tokenizer.class, LongWritable.class, Text.class,
                      Text.class, IntWritable.class, mapAConf);
0 голосов
/ 03 марта 2015

На самом деле класс mapper должен реализовать интерфейс org.apache.hadoop.mapred.Mapper. У меня была такая же проблема, но это решило ее.

0 голосов
/ 27 июля 2011

Для первого аргумента вашего ChainMapper.addMapper() вы передали объект job. Пока функция ожидает объект типа JobConf. Переписать на:

 ChainMapper.addMapper(
            (JobConf)conf, 
            MapClass.class, 
            Text.class, 
            Text.class, 
            Text.class, 
            Text.class, 
            true, 
            map1
            ); 

должен решить проблему ..

0 голосов
/ 27 июля 2011

Вы должны использовать Configuration вместо JobConf. JobConf является подклассом Configuration, поэтому для этого должен существовать конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...