Я запускаю код 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;
}
}
Вставьте код - без кода было бы только дикое предположение. –
Покажите нам список импорта. – Tudor
Спасибо. Операции импорта изменяются в соответствии с ответом @Tudor ниже. Появится новая ошибка, говорящая -> каталог вывода, не заданный в JobConf. –