MapReduce入门编程-成绩求和排序

简介: MapReduce入门编程-成绩求和排序

MapReduce入门编程

实验目的      

1、 掌握编程环境的准备方法

2、掌握程序的打包方法

3、掌握MapReduce任务的运行方法、运行状态的查看方法。

实验任务与要求  

任务:选择一个任务或自定义其他任务使用MapReduce完成。

要求:完成完整的环境准备、编码、打包、运行、查看状态和查看结果

实验原理(技术)

1、 MapReduce中map和reduce的原理

2、 Linux的基本操作命令

3、 Java编程基础

4、 hdfs基本原理

步骤(算法、程序)、数据记录与处理、结果分析等

环境搭建:

打开VMware开启集群机,准备三份成绩单分别为

Sum_score.txt--------sum_score1.txt-------sum_score2.txt

打开eclipse创建工程:File->New->Other->Map/Reduce->next

输入工程名称(这里我已经建好了,我只是演示输入xxx)

然后点击完成

点开工程在src下面新建一个包专门用来写

在新建的包下面新建一个class编写代码

接下编写代码:

1. package Ds_mapreducd;
2. 
3. import java.io.IOException;
4. 
5. import org.apache.hadoop.conf.Configuration;
6. import org.apache.hadoop.fs.Path;
7. import org.apache.hadoop.io.IntWritable;
8. import org.apache.hadoop.io.LongWritable;
9. import org.apache.hadoop.io.Text;
10. import org.apache.hadoop.mapreduce.Job;
11. import org.apache.hadoop.mapreduce.Mapper;
12. import org.apache.hadoop.mapreduce.Reducer;
13. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
14. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
15. 
16. public class sum_out {
17.   static public class TSMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
18.     Text name =new Text();
19.     IntWritable score =new IntWritable();
20.     @Override
21.     protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
22.         throws IOException, InterruptedException {
23.       String[] vals=value.toString().split("\t");
24.       if (vals.length==2) {
25.         score.set(Integer.parseInt(vals[1]));
26.         name.set(vals[0]);
27.         context.write(name, score);
28.       }
29.     }
30.   }
31.   static public class TSReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
32.     Text name =new Text();
33.     IntWritable totalscore=new IntWritable();
34.     @Override
35.     protected void reduce(Text name, Iterable<IntWritable> scores,
36.         Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
37.       int sum=0;
38.       for(IntWritable sc:scores) {
39.         sum=sum+sc.get();
40.       }
41.       totalscore.set(sum);
42.       context.write(name, totalscore);
43.     }
44.   }
45.   public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
46.     // TODO Auto-generated method stub
47.     Configuration conf = new Configuration();           //创建配置类
48.     Job job = Job.getInstance(conf, "任务五:成绩汇总");    //实例化Job类
49. 
50.     job.setJarByClass(sum_out.class);           //设置主类名
51. 
52.     TextInputFormat.setInputPaths(job, new Path(args[0]));  //设置待输入文件的位置
53.     job.setInputFormatClass(TextInputFormat.class);       //指定使用字符串输入格式类
54. 
55.     job.setMapperClass(TSMapper.class);          //指定使用自定义Map类
56.     job.setMapOutputKeyClass(Text.class);      //指定Map类输出的,K类型,(如果同Reduce类的输出可省略)
57.     job.setMapOutputValueClass(IntWritable.class);   //指定Map类输出的,V类型,(如果同Reduce类的输出可省略)
58. 
59.     job.setReducerClass(TSReducer.class);      //指定使用自定义Reduce类
60.     job.setOutputKeyClass(Text.class);         //指定Reduce类输出的,K类型
61.     job.setOutputValueClass(IntWritable.class);    //指定Reduce类输出的,V类型
62.     job.setNumReduceTasks(1); //指定Reduce个数
63. 
64.     job.setOutputFormatClass(TextOutputFormat.class);   //指定使用默认输出格式类
65.     TextOutputFormat.setOutputPath(job, new Path(args[1])); //设置输出结果文件位置
66. 
67.     System.exit(job.waitForCompletion(true)? 0:1);      //提交任务并监控任务状态,等待任务完成
68. 
69.   }
70. 
71. 
72. }

将这个代码打成jar包上传至集群机上面

右键需要打包的java文件Export->JAR file

选择保存的路径以及保存的文件名.jar

完成后可以看到指定路径下生成的jar包

将生成的jar包上传

将之前准备好的三份成绩单进行合并:

sum_score.txt--------sum_score1.txt-------sum_score2.txt

合并文件:

对三份成绩合并

完成

查看数据(score_all.txt也是成绩合并的结果,这里使用代码合并)

Cat a.txt

运行jar包对成绩进行汇总

同时在web页面查看进度

查看最后的结果

查看结果:

验证结果正确

总结

通过本次实验掌握了mapreduce编程的方法与思想,了解了map与reduce阶段运行机制,自己可以如何根据业务要求编写map与reduce阶段的代码


相关文章
|
3月前
|
分布式计算 Hadoop Java
MapReduce编程:自定义分区和自定义计数器
MapReduce编程:自定义分区和自定义计数器
29 0
|
6月前
|
分布式计算 资源调度 大数据
黑马程序员-大数据入门到实战-MapReduce & YARN入门
黑马程序员-大数据入门到实战-MapReduce & YARN入门
77 0
|
4月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
59 0
|
11天前
|
机器学习/深度学习 分布式计算 监控
面经:MapReduce编程模型与优化策略详解
【4月更文挑战第10天】本文是关于MapReduce在大数据处理中的关键作用的博客摘要。作者分享了面试经验,强调了MapReduce的基本原理、Hadoop API、优化策略和应用场景。MapReduce包含Map和Reduce两个主要阶段,Map阶段处理输入数据生成中间键值对,Reduce阶段进行聚合计算。面试重点包括理解MapReduce工作流程、使用Hadoop API编写Map/Reduce函数、选择优化策略(如分区、Combiner和序列化)以及应用场景,如日志分析和机器学习。
19 2
|
3月前
|
分布式计算 Java Hadoop
MapReduce编程:检索特定群体搜索记录和定义分片操作
MapReduce编程:检索特定群体搜索记录和定义分片操作
28 0
|
3月前
|
分布式计算 Java Hadoop
MapReduce编程:数据过滤保存、UID 去重
MapReduce编程:数据过滤保存、UID 去重
39 0
|
3月前
|
缓存 分布式计算 Java
MapReduce编程:join操作和聚合操作
MapReduce编程:join操作和聚合操作
32 0
|
5月前
|
分布式计算 资源调度 Java
MapReduce入门(一篇就够了)(下)
MapReduce入门(一篇就够了)(下)
61 0
|
7月前
|
存储 分布式计算 大数据
大数据MapReduce入门
大数据MapReduce入门
41 0
|
9月前
|
分布式计算 Java Hadoop
云计算与大数据实验五 MapReduce编程
云计算与大数据实验五 MapReduce编程
225 0