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名的学生学号、课程号、成绩