Maven工程的MapReduce程序3---实现统计各部门员工薪水总和功能(优化)

该博客主要介绍了如何优化Maven工程中的MapReduce程序,包括使用序列化提高效率,实现自定义分区Patitioner以控制输出文件数量,以及在Map阶段使用Combiner减少网络传输。文章详细讲解了每个优化步骤的实现代码和执行过程。
摘要由CSDN通过智能技术生成

本文在实现统计各部门员工薪水总和功能的基础上进行,还没实现的话请参考:实现统计各部门员工薪水总和功能

优化项目:

1.使用序列化

2.实现分区Patitioner

3.Map使用Combiner

使用序列化

本案例是在实现统计各部门员工薪水总和功能基础上进行。

序列化与反序列化:

序列化是指将Java对象转换为二进制串的过程,方便网络传输;

反序列化是指将二进制串转换为Java对象的过程。
在这里插入图片描述
MapReduce编程模型及编程思路:
在这里插入图片描述
实现统计各部门员工薪水总和功能相比,本案例要多建立一个Employee类,Employee类代码如下:

代码

Employee.java

package com.wang.employee;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * @author CreazyHacking
 * @version 1.0
 * @date 12/4/2021 10:12 PM
 */
public class Employee implements Writable {
   

    //字段名 EMPNO, ENAME,    JOB,   MGR,   HIREDATE,  SAL, COMM, DEPTNO
    //数据类型:Int,Char,          Char  , Int,     Date  ,       Int   Int,  Int
    //数据: 7654, MARTIN, SALESMAN, 7698, 1981/9/28, 1250, 1400, 30

    //由以上定义变量

    private int empno; //员工编号
    private String ename; //姓名
    private String job; //部门
    private int mgr; //经理
    private String hiredate; //时间
    private int sal;  //工资
    private int comm;//奖金

    //序列化方法:将java对象转化为可跨机器传输数据流(二进制串/字节)的一种技术
    public void write(DataOutput dataOutput) throws IOException {
   
        dataOutput.writeInt(this.empno);
        dataOutput.writeUTF(this.ename);
        dataOutput.writeUTF(this.job);
        dataOutput.writeInt(this.mgr);
        dataOutput.writeUTF(this.hiredate);
        dataOutput.writeInt(this.sal);
        dataOutput.writeInt(this.comm);

    }
    //反序列化方法:将可跨机器传输数据流(二进制串)转化为java对象的一种技术
    public void readFields(DataInput dataInput) throws IOException {
   
        this.empno = dataInput.readInt();
        this.ename = dataInput.readUTF();
        this.job = dataInput.readUTF();
        this.mgr = dataInput.readInt();
        this.hiredate = dataInput.readUTF();
        this.sal = dataInput.readInt();
        this.comm = dataInput.readInt();
    }
    //其他类通过set/get方法操作变量:Source-->Generator Getters and Setters

    public int getEmpno() {
   
        return empno;
    }

    public void setEmpno(int empno) {
   
        this.empno = empno;
    }

    public String getEname() {
   
        return ename;
    }

    public void setEname(String ename) {
   
        this.ename = ename;
    }

    public String getJob() {
   
        return job;
    }

    public void setJob(String job) {
   
        this.job = job;
    }

    public int getMgr() {
   
        return mgr;
    }

    public void setMgr(int mgr) {
   
        this.mgr = mgr;
    }

    public String getHiredate() {
   
        return hiredate;
    }

    public void setHiredate(String hiredate) {
   
        this.hiredate = hiredate;
    }

    public int getSal() {
   
        return sal;
    }

    public void setSal(int sal) {
   
        this.sal = sal;
    }

    public int getComm() {
   
        return comm;
    }

    public void setComm(int comm) {
   
        this.comm = comm;
    }
}

SalaryTotalMapper.java

package com.wang.employee;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @au
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值