MapReduce

1.需求

创建一个文件上传到HDFS,统计每个学生的总成绩,文件内容如下:

使用MapReduce

张三 英语 80 河南省

张三 数学 50 河南省

张三 语文 60 河南省

李四 英语 90 河南省

李四 语文 90 河南省

李四 数学 85 河南省

通过结果:

张三 190

李四 265

2.上传到hdfs

3.IDEA代码

添加依赖

java 复制代码
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-app</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-server-resourcemanager</artifactId>
            <version>3.1.4</version>
        </dependency>
    </dependencies>

java 复制代码
package com.yh;

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;

import java.io.IOException;

// 测试类

public class ScoreTest {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");

        Job job = Job.getInstance(conf);
        job.setJarByClass(ScoreTest.class);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        TextInputFormat.addInputPath(job,new Path("/score.txt"));
        TextOutputFormat.setOutputPath(job,new Path("/out4"));

        job.setMapperClass(ScoreMapper.class);
        job.setReducerClass(ScoreReducer.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        boolean b = job.waitForCompletion(true);
        System.out.println(b);


    }
    
    // Mapper类

    static class ScoreMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
       private Text student = new Text();
       private IntWritable score = new IntWritable();
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] parts = value.toString().split("\\s+"); // 假设字段由空白字符分隔
            if (parts.length >= 4) {
                student.set(parts[0]);
                score.set(Integer.parseInt(parts[2]));
                context.write(student, score);
            }
        }
    }


//Reducer类

    static class ScoreReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable value : values){
                sum = sum+value.get();
            }
            context.write(key,new IntWritable(sum));

        }
    }
}

4.maven打包

5.上传

6.查看

相关推荐
Gofarlic_oms18 小时前
Windchill用户登录与模块访问失败问题排查与许可证诊断
大数据·运维·网络·数据库·人工智能
Zoey的笔记本9 小时前
2026告别僵化工作流:支持自定义字段的看板工具选型与部署指南
大数据·前端·数据库
lingling0099 小时前
2026 年 BI 发展新趋势:AI 功能如何让数据分析工具 “思考” 和 “对话”?
大数据·人工智能·数据分析
鹧鸪云光伏9 小时前
光伏项目多,如何高效管理?
大数据·人工智能·光伏
Acrel1870210670610 小时前
浅谈电气防火限流保护器设计在消防安全中的应用价值
大数据·网络
赵谨言10 小时前
Python串口的三相交流电机控制系统研究
大数据·开发语言·经验分享·python
汇智信科10 小时前
智慧矿山 & 工业大数据创新解决方案 —— 智能能源管理系统
大数据·能源·智慧矿山·工业大数据·汇智信科·智能能源管理系统·多元维度
企业对冲系统官11 小时前
基差风险管理系统日志分析功能的架构与实现
大数据·网络·数据库·算法·github·动态规划
忍冬行者12 小时前
Elasticsearch 超大日志流量集群搭建(网关 + 独立 Master + 独立 Data 纯生产架构,角色完全分离,百万级日志吞吐)
大数据·elasticsearch·云原生·架构·云计算
阿坤带你走近大数据12 小时前
如何解决农业数据的碎片化问题
大数据·人工智能·rag·大模型应用