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

Posted qq_58392257

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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编写代码

接下编写代码:

package Ds_mapreducd;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class sum_out 
	static public class TSMapper extends Mapper<LongWritable, Text, Text, IntWritable>
		Text name =new Text();
		IntWritable score =new IntWritable();
		@Override
		protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
				throws IOException, InterruptedException 
			String[] vals=value.toString().split("\\t");
			if (vals.length==2) 
				score.set(Integer.parseInt(vals[1]));
				name.set(vals[0]);
				context.write(name, score);
			
		
	
	static public class TSReducer extends Reducer<Text, IntWritable, Text, IntWritable>
		Text name =new Text();
		IntWritable totalscore=new IntWritable();
		@Override
		protected void reduce(Text name, Iterable<IntWritable> scores,
				Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException 
			int sum=0;
			for(IntWritable sc:scores) 
				sum=sum+sc.get();
			
			totalscore.set(sum);
			context.write(name, totalscore);
		
	
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException 
		// TODO Auto-generated method stub
		Configuration conf = new Configuration();  		      //创建配置类
		Job job = Job.getInstance(conf, "任务五:成绩汇总"); 	  //实例化Job类
	
		job.setJarByClass(sum_out.class);			      //设置主类名
		
		TextInputFormat.setInputPaths(job, new Path(args[0]));	//设置待输入文件的位置
		job.setInputFormatClass(TextInputFormat.class);  	    //指定使用字符串输入格式类
		
		job.setMapperClass(TSMapper.class);			     //指定使用自定义Map类
		job.setMapOutputKeyClass(Text.class);			 //指定Map类输出的,K类型,(如果同Reduce类的输出可省略)
		job.setMapOutputValueClass(IntWritable.class);	 //指定Map类输出的,V类型,(如果同Reduce类的输出可省略)
		
		job.setReducerClass(TSReducer.class);			 //指定使用自定义Reduce类
		job.setOutputKeyClass(Text.class);				 //指定Reduce类输出的,K类型
		job.setOutputValueClass(IntWritable.class);		 //指定Reduce类输出的,V类型
		job.setNumReduceTasks(1);	//指定Reduce个数
		
		job.setOutputFormatClass(TextOutputFormat.class);		//指定使用默认输出格式类
		TextOutputFormat.setOutputPath(job, new Path(args[1]));	//设置输出结果文件位置
		
		System.exit(job.waitForCompletion(true)? 0:1);			//提交任务并监控任务状态,等待任务完成

	



将这个代码打成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阶段的代码

以上是关于MapReduce入门编程-成绩求和排序的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop MapReduce编程 API入门系列之统计学生成绩版本2(十八)

sql排序问题 查询学生成绩5-7名的学生学号、课程号、成绩

sql排序问题 查询学生成绩5-7名的学生学号、课程号、成绩

实训任务05 MapReduce获取成绩表的最高分记录

细节拉满Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码项目文件下载地址)

《C#零基础入门之百识百例》(六十四)结构体在方法中的使用 -- 学生成绩排序 -- 排序拓展