Я запустил WordCount на одном узле на моем Mac, и это сработало, поэтому я создал другое приложение MapReduce и запустил его, но оно застряло на map 10% reduce 0%
, а иногда на map 0% reduce 0%
. Код приложения, которое я сделал:
public class TemperatureMaximale {
public static class TemperatureMapper extends Mapper<Object, Text, Text, IntWritable>{
private Text city = new Text();
private IntWritable temperature = new IntWritable();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
String line = itr.nextToken();
String cityStr = line.split(",")[0];
int temperatureInt = Integer.parseInt(line.split(",")[1].replaceAll("\\s+", ""));
city.set(cityStr);
temperature.set(temperatureInt);
context.write(city, temperature);
}
}
}
public static class TemperatureReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int maxValue = Integer.MIN_VALUE;
for (IntWritable value : values) {
maxValue = Math.max(maxValue, value.get());
}
result.set(maxValue);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "temperature");
job.setJarByClass(TemperatureMaximale.class);
job.setMapperClass(TemperatureMapper.class);
job.setCombinerClass(TemperatureReducer.class);
job.setReducerClass(TemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[1]));
FileOutputFormat.setOutputPath(job, new Path(args[2]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Я понятия не имею, почему это не работает, так как это в основном копия WordCount, я просто делаю несколько различных операций над картой и сокращаю методы.
Пример файлов, которые я использую в качестве ввода:
Toronto, 20
Whitby, 25
New York, 22
Rome, 32