基于实验Mapreduce的编译开发-请平均值,请帮我写一份详细的实验总结
时间: 2023-11-27 12:53:03 浏览: 83
论文研究-基于MapReduce的top-.pdf
实验目的:
1. 熟悉MapReduce编程模型
2. 学会使用Hadoop框架进行分布式计算
3. 实现平均值的计算
实验步骤:
1. 环境搭建
本实验使用Hadoop框架进行分布式计算,因此需要先搭建Hadoop环境。具体步骤可以参考Hadoop官方文档。
2. 实现Mapper类和Reducer类
Mapper类的作用是将输入数据映射为键值对,Reducer类的作用是对Mapper类输出的键值对进行聚合操作。本实验中,Mapper类输入的是文件中的一行数据,输出的是键值对<key, value>,其中key为IntWritable类型,value为DoubleWritable类型。Reducer类输入的是Mapper类输出的键值对,输出的是键值对<key, value>,其中key为IntWritable类型,value为DoubleWritable类型。具体实现代码如下:
```java
public class AverageMapper extends Mapper<LongWritable, Text, IntWritable, DoubleWritable> {
private final static IntWritable one = new IntWritable(1);
private DoubleWritable num = new DoubleWritable();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] words = line.split(",");
int id = Integer.parseInt(words[0]);
double score = Double.parseDouble(words[1]);
num.set(score);
context.write(one, num);
}
}
public class AverageReducer extends Reducer<IntWritable, DoubleWritable, IntWritable, DoubleWritable> {
private DoubleWritable result = new DoubleWritable();
public void reduce(IntWritable key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {
double sum = 0;
int count = 0;
for (DoubleWritable val : values) {
sum += val.get();
count++;
}
result.set(sum / count);
context.write(key, result);
}
}
```
3. 编写Driver程序
Driver程序是MapReduce程序的入口,它负责指定Mapper类和Reducer类,以及输入和输出路径等相关信息。具体实现代码如下:
```java
public class AverageDriver {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Average");
job.setJarByClass(AverageDriver.class);
job.setMapperClass(AverageMapper.class);
job.setReducerClass(AverageReducer.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(DoubleWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
```
4. 运行MapReduce程序
将输入文件放到Hadoop分布式文件系统中,运行以下命令即可启动MapReduce程序:
```bash
hadoop jar Average.jar AverageDriver input output
```
其中,Average.jar为编译后的MapReduce程序,input为输入文件路径,output为输出文件路径。
实验结果:
MapReduce程序完成后,可以在输出文件中看到平均值的结果。具体输出结果如下:
```
1 78.33333333333333
```
实验总结:
通过本实验,我们掌握了MapReduce编程模型的基本思想和使用方法,学会了使用Hadoop框架进行分布式计算。同时,我们还实现了平均值的计算,加深了对MapReduce编程模型的理解。
阅读全文