虚拟机复制

  1. package com.simple.mr;
  2.  
  3. import java.io.IOException;
  4. import java.util.StringTokenizer;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.LongWritable;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Mapper;
  9.  
  10. public class TotalScoreMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
  11. @Override
  12. protected void map(LongWritable key, Text value, Context context)
  13. throws IOException, InterruptedException {
  14. // 读取一行数据
  15. String val = value.toString();
  16.  
  17. // 把读取的数据以换行作为分割符
  18. StringTokenizer stringTokenizer = new StringTokenizer(val, "\t");
  19.  
  20. while(stringTokenizer.hasMoreElements()) {
  21. StringTokenizer tmp = new StringTokenizer(stringTokenizer.nextToken());
  22.  
  23. // 对读取的一行的名称和成绩进行切分并写入到context对象中
  24. String username = tmp.nextToken();
  25. String score = tmp.nextToken();
  26.  
  27. context.write(new Text(username), new IntWritable(Integer.valueOf(score)));
  28. }
  29. }
  30. }

  1. package com.simple.mr;
  2.  
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Reducer;
  8.  
  9. public class TotalScoreReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
  10.  
  11. @Override
  12. protected void reduce(Text key, Iterable<IntWritable> values,Context context)
  13. throws IOException, InterruptedException {
  14.  
  15. // 获取对键值集合遍历对象
  16. Iterator<IntWritable> iterator = values.iterator();
  17.  
  18. int sum =0;
  19. // 循环获取相同键的所有值并计算和
  20. while(iterator.hasNext()){
  21. int v = iterator.next().get();
  22. sum += v;
  23. }
  24.  
  25. context.write(key, new IntWritable(sum));
  26. }
  27. }

  1. package com.simple.mr;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  10.  
  11. public class TotalScoreDriver {
  12. public static void main(String[] args) throws Exception{
  13. //获取作业对象
  14. Job job = Job.getInstance(new Configuration());
  15.  
  16. //设置主类
  17. job.setJarByClass(TotalScoreDriver.class);
  18.  
  19. //设置job参数
  20. job.setMapperClass(TotalScoreMapper.class);
  21. job.setReducerClass(TotalScoreReducer.class);
  22.  
  23. job.setMapOutputKeyClass(Text.class);
  24. job.setMapOutputValueClass(IntWritable.class);
  25.  
  26. job.setOutputKeyClass(Text.class);
  27. job.setOutputValueClass(IntWritable.class);
  28.  
  29. //设置job输入输出
  30. FileInputFormat.setInputPaths(job, new Path("hdfs://localhost:9000/data/dataset/input/score.txt"));
  31. FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/data/dataset/output"));
  32.  
  33. System.exit(job.waitForCompletion(true) ? 0 : 1);
  34. }
  35. }
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值