我正在運行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;
}
}
將代碼粘貼 - 無碼那也只能是胡亂猜測。 – 2012-07-08 14:13:49
向我們顯示導入列表。 – Tudor 2012-07-08 14:17:17
謝謝。進口報表相應地改變爲@Tudor下面的答案。現在彈出一個新的錯誤 - >輸出目錄未在JobConf中設置。 – 2012-07-08 14:37:40