敲了一下hadoop权威指南第二章的例题,虽然基本上是照着书上敲的,但还是把它放到这方便以后查看。
代码如下:
<span style="font-size:18px;"><span style="font-size:18px;">import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class MaxTemperature {
static class MaxTemperatureMapper
extends Mapper<LongWritable, Text, Text ,IntWritable >{
private static final int MISSING = 9999;
public void map(LongWritable key,Text value, Context context)
throws IOException, InterruptedException{
String line = value.toString();
String year = line.substring(15, 19);
int airTemperature ;
if (line.charAt(29) == '+'){
airTemperature = Integer.parseInt(line.substring(30, 35));
}
else{
airTemperature = Integer.parseInt(line.substring(29, 35));
}
String quality = line.substring(35, 36);
if(airTemperature != MISSING && quality.matches("[01459]"));{
context.write(new Text(year), new IntWritable(airTemperature));
}
}
}
static class MaxTemperatureReducer
extends Reducer <Text , IntWritable, Text, 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());
}
context.write(key, new IntWritable(maxValue));
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
if (args.length !=2){
System.err.println("Usage: MaxTemperature <input path> <output path>");
System.exit(-1);
}
Job job =new Job();
job.setJarByClass(MaxTemperature.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));
job.setMapperClass(MaxTemperatureMapper.class);
job.setReducerClass(MaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
</span></span>
输出结果如下(输入数据是自己随便造的,输出的所有气温值都乘了10)