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编程:自定义分区和自定义计数器
46 0
|
3月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
145 0
|
2天前
|
分布式计算 大数据 Hadoop
揭秘MapReduce背后的魔法:从基础类型到高级格式,带你深入理解这一大数据处理利器的奥秘与实战技巧,让你从此不再是编程门外汉!
【8月更文挑战第17天】MapReduce作为分布式计算模型,是大数据处理的基石。它通过Map和Reduce函数处理大规模数据集,简化编程模型,使开发者聚焦业务逻辑。MapReduce分单阶段和多阶段,支持多种输入输出格式如`TextInputFormat`和`SequenceFileInputFormat`。例如,简单的单词计数程序利用`TextInputFormat`读取文本行并计数;而`SequenceFileInputFormat`适用于高效处理二进制序列文件。合理选择类型和格式可有效解决大数据问题。
|
3月前
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
62 0
|
2月前
|
分布式计算 Hadoop Java
MapReduce编程模型——在idea里面邂逅CDH MapReduce
MapReduce编程模型——在idea里面邂逅CDH MapReduce
49 15
|
2月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
38 1
|
2月前
|
存储 分布式计算 Hadoop
MapReduce编程模型——自定义序列化类实现多指标统计
MapReduce编程模型——自定义序列化类实现多指标统计
23 0
|
2月前
|
机器学习/深度学习 分布式计算 并行计算
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
32 0
|
2月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
83 0
|
3月前
|
分布式计算 资源调度 Hadoop
MapReduce分布式编程
MapReduce分布式编程
52 1