2012-07-08 5 views
0

Я запускаю код hadoop, который имеет класс разделителя внутри задания. Но, когда я запускаю командуОшибка при запуске базового кода Hadoop

hadoop jar Sort.jar SecondarySort inputdir outputdir 

Я получаю сообщение об ошибке выполнения, которая говорит

class KeyPartitioner not org.apache.hadoop.mapred.Partitioner. 

Я гарантировал, что класс KeyPartitioner расширил класс секционирования, но почему я получаю эту ошибку?

Вот код драйвера:

JobConf conf = new JobConf(getConf(), SecondarySort.class); 
    conf.setJobName(SecondarySort.class.getName()); 

    conf.setJarByClass(SecondarySort.class); 

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

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

    conf.setPartitionerClass((Class<? extends Partitioner<StockKey, DoubleWritable>>) KeyPartitioner.class); 

    conf.setMapperClass((Class<? extends Mapper<LongWritable, Text, StockKey, DoubleWritable>>) StockMapper.class); 
    conf.setReducerClass((Class<? extends Reducer<StockKey, DoubleWritable, Text, Text>>) StockReducer.class); 

и вот код класса управления разделами:

public class KeyPartitioner extends Partitioner<StockKey, Text> { 

@Override 
public int getPartition(StockKey arg0, Text arg1, int arg2) { 

    int partition = arg0.name.hashCode() % arg2; 

    return partition; 
} 
} 
+0

Вставьте код - без кода было бы только дикое предположение. –

+0

Покажите нам список импорта. – Tudor

+0

Спасибо. Операции импорта изменяются в соответствии с ответом @Tudor ниже. Появится новая ошибка, говорящая -> каталог вывода, не заданный в JobConf. –

ответ

1

Обратите внимание, что есть два редактирования разделов в Hadoop:

org.apache.hadoop.mapreduce.Partitioner 
org.apache.hadoop.mapred.Partitioner 

Убедитесь, что ваш класс KeyPartitioner реализует второй интерфейс, а не первый абстрактный раздел s.

Edit: Вы должны установить входные и выходные папки:

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

Спасибо! Правильно изменили инструкции импорта. Появится новая ошибка: -> каталог вывода, не заданный в JobConf. –

+1

@Abhishek Shivkumar: Смотрите мое редактирование. – Tudor

+1

В новом ['Hadoop - The Definitive Guide'] (http://shop.oreilly.com/product/0636920021773.do) есть целый раздел по новому API, и примеры в книге также основаны на новый API. Предлагал бы получить книгу. –

Смежные вопросы