大数据-MapReduce应用一

大数据技术之MapReduce MapReduce是一个分布式运算程序的编程框架,是基于Hadoop的数据分析计算的核心框架。MapReduce处理过程分为两个阶段:Map和Reduce。Map负责把一个任务分解成多个任务,Reduce负责把分解后多任务处理的结果汇总。压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。在运行MR程序时,I/O操作、网络数据传输、Shuffle 和Merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,因此,使用数据压缩显得非常重要。 阅读详情

案例

student A 06140412 05 08 102 110 106
student B 06140407 02 06 60 98 80
student C 06140404 10 07 98 31 63
student D 06140403 07 10 105 109 107
student E 06140406 03 03 57 87 92
student F 06140408 10 06 102 102 50
student G 06140402 03 07 54 61 64
student H 06140401 05 03 83 76 111
student I 06140409 05 10 70 56 91
student J 06140411 07 09 22 119 112
student K 06140410 02 01 45 65 80
student L 06140405 03 02 79 20 26

一、需求:计算每个学生的总成绩

GradeWritable类

package com.GradeCount.util;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/*
 * @author Administrator
 * @version 1.0
 */
public class GradeWritable implements Writable {
    //语文
    private static int chinese;
    //数学
    private static int math;
    //英语
    private static int english;
    //总成绩
    private static int sum;

    //无参构造方法
    public GradeWritable(){}
    //有参构造方法
    public GradeWritable(int chinese,int math,int english){
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = chinese + math + english;
    }
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeInt(chinese);
        dataOutput.writeInt(math);
        dataOutput.writeInt(english);
        dataOutput.writeInt(sum);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        chinese = dataInput.readInt();
        math = dataInput.readInt();
        english = dataInput.readInt();
        sum = dataInput.readInt();
    }

    @Override
    public String toString() {
        return chinese+"\t"+math+'\t'+english+'\t'+sum;
    }
}

GradeMapper类

package com.GradeCount.util;

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

import java.io.IOException;
/*
 * @author Administrator
 * @version
 * @task 计算每个学生的总成绩
 */
public class GradeMapper extends Mapper<LongWritable, Text, Text, GradeWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取数据
        String line = value.toString();
        //分割数据
        String[] field = line.split("\t");
        //获取学生名字
        String studentName = field[0];
        //获取语文成绩
        int chinese = Integer.parseInt(field[4]);
        //获取数学成绩
        int math = Integer.parseInt(field[5]);
        //获取英语成绩
        int english = Integer.parseInt(field[6]);
        //写到reducer端
        context.write(new Text(studentName),new GradeWritable(chinese,math,english));
    }
}

GradeReducer类

package com.GradeCount.util;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
/*
 * @author Administrator
 * @version
 * @task 计算每个学生的总成绩
 */
public class GradeReducer extends Reducer<Text,GradeWritable,Text,GradeWritable> {
    @Override
    protected void reduce(Text key, Iterable<GradeWritable> values, Context context) throws IOException, InterruptedException {
        //方法一
        for (GradeWritable grade: values){
            //写到Driver端
            context.write(key,grade);
        }
       //方法二
//       context.write(key,values.iterator().next()); 
    }
}

GradeDriver类

package com.GradeCount.util;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/*
 * @author Administrator
 * @version
 * @task 计算每个学生的总成绩
 */
public class GradeDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实例化Configuration对象
        Configuration conf = new Configuration();
        //创建任务
        Job job = Job.getInstance(conf);
        //指定Jar包的位置
        job.setJarByClass(GradeDriver.class);
        //关联Mapper类
        job.setMapperClass(GradeMapper.class);
        //关联Reducer类
        job.setReducerClass(GradeReducer.class);
        //设置Mapper输出的数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(GradeWritable.class);
        //设置Reducer输出的数据类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(GradeWritable.class);
        //设置输入路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //设置输出路径
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        //提交任务
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}

二、优化:多个小文件情况下进行优化

GradeDriver类

//小文件优化
job.setInputFormatClass(CombineTextInputFormat.class);
//设置最大值为15M
CombineTextInputFormat.setMaxInputSplitSize(job,15728640);
//设置最小值为8M
CombineTextInputFormat.setMinInputSplitSize(job,8388608);

三、需求:按学号正序排序,计算每个学生的总成绩

GradeSort类

package com.SortCount.util;

import org.apache.hadoop.io.WritableComparable;

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

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号排序计算每个学生的总成绩
 */
public class GradeSort implements WritableComparable<GradeSort> {
    //学号
    private String id;
    //语文成绩
    private int chinese;
    //数学成绩
    private int math;
    //英语成绩
    private int english;
    //总成绩
    private int sum;

    //无参构造方法
    public GradeSort(){}
    //有参构造方法
    public GradeSort(String id,int chinese,int math,int english){
        this.id = id;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = chinese + math + english;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }

    @Override
    public String toString() {
        return id+"\t"+chinese+"\t"+math+"\t"+english+"\t"+sum;
    }
    
    /**
     * 全局排序,即对key的排序
     * 每一个实例的静态变量是引用同一个静态变量
     * 静态变量排序是没意义
     */
    @Override
    public int compareTo(GradeSort object) {
        int thisID = Integer.parseInt(this.id);
        int objectID = Integer.parseInt(object.id);
        if (thisID > objectID){
            return 1;
        }else if (thisID < objectID){
            return -1;
        }else {
            return 0;
        }
    }

    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeUTF(id);
        dataOutput.writeInt(chinese);
        dataOutput.writeInt(math);
        dataOutput.writeInt(english);
        dataOutput.writeInt(sum);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        id = dataInput.readUTF();
        chinese = dataInput.readInt();
        math = dataInput.readInt();
        english = dataInput.readInt();
        sum = dataInput.readInt();
    }
}

SortMapper类

package com.SortCount.util;

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

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号排序计算每个学生的总成绩
 */
public class SortMapper extends Mapper<LongWritable, Text,GradeSort, Text> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取数据
        String line = value.toString();
        //分割数据
        String[] field = line.split("\t");
        //学生名字
        String studentName = field[0];
        //学号
        String id = field[1];
        //语文成绩
        int chinese = Integer.parseInt(field[4]);
        //数学成绩
        int math = Integer.parseInt(field[5]);
        //英语成绩
        int english = Integer.parseInt(field[6]);
        //写到Reducer端
        context.write(new GradeSort(id,chinese,math,english),new Text(studentName));
    }
}

SortReducer类

package com.SortCount.util;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号排序计算每个学生的总成绩
 */
public class SortReducer extends Reducer<GradeSort,Text,Text,GradeSort> {

    @Override
    protected void reduce(GradeSort key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        context.write(values.iterator().next(),key);
    }
}

SortDriver类

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号排序计算每个学生的总成绩
 */
public class SortDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实例化Configuration对象
        Configuration conf = new Configuration();
        //创建任务job
        Job job = Job.getInstance(conf);
        //指定jar包的位置
        job.setJarByClass(SortDriver.class);
        //关联Mapper类
        job.setMapperClass(SortMapper.class);
        //关联Reducer类
        job.setReducerClass(SortReducer.class);
        //设置Mapper输出的数据类型
        job.setMapOutputKeyClass(GradeSort.class);
        job.setMapOutputValueClass(Text.class);
        //设置Reducer输出的数据类型
        job.setOutputKeyClass(GradeSort.class);
        job.setOutputValueClass(Text.class);
        //设置输入路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        //执行任务
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}

四、需求:按学号正序排序,按考场号分区,计算每个学生的总成绩

GradeSort类

package com.PartitionSort.util;

import org.apache.hadoop.io.WritableComparable;

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

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号正序排序,并根据考场进行分区,计算每个学生的总成绩
 */
public class GradeSort implements WritableComparable<GradeSort> {
    //学号
    private String id;
    //考场号
    private int roomID;
    //语文成绩
    private int chinese;
    //数学成绩
    private int math;
    //英语成绩
    private int english;
    //总成绩
    private int sum;

    //无参构造方法
    public GradeSort(){}
    //有参构造方法
    public GradeSort(String id,int roomID,int chinese,int math,int english){
        this.id = id;
        this.roomID = roomID;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = chinese + math + english;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getRoomID() {
        return roomID;
    }

    public void setRoomID(int roomID) {
        this.roomID = roomID;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }

    @Override
    public int compareTo(GradeSort object) {
        return Integer.parseInt(this.id) > Integer.parseInt(object.id)? 1:-1;
    }

    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeUTF(id);
        dataOutput.writeInt(roomID);
        dataOutput.writeInt(chinese);
        dataOutput.writeInt(math);
        dataOutput.writeInt(english);
        dataOutput.writeInt(sum);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        id = dataInput.readUTF();
        roomID = dataInput.readInt();
        chinese = dataInput.readInt();
        math = dataInput.readInt();
        english = dataInput.readInt();
        sum = dataInput.readInt();
    }

    @Override
    public String toString() {
        return id + "\t" + roomID + "\t" + chinese + "\t" + math + "\t" + english + "\t" + sum;
    }
}

RoomIDPartition类

package com.PartitionSort.util;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Partitioner;
/*
 * @author Administrator
 * @version 1.0
 * @task 按学号正序排序,并根据考场进行分区,计算每个学生的总成绩
 */
public class RoomIDPartition extends Partitioner<GradeSort, NullWritable> {
    @Override
    public int getPartition(GradeSort gradeSort, NullWritable nullWritable, int i) {
        if (gradeSort.getRoomID() == 2){
            return 0;
        }else if (gradeSort.getRoomID() == 3){
            return 1;
        }else if (gradeSort.getRoomID() == 5){
            return 2;
        }else if (gradeSort.getRoomID() == 7){
            return 3;
        }else {
            return 4;
        }
//        return (gradeSort.getRoomID() & Integer.MAX_VALUE) % i;
    }
}

PartitionMapper类

package com.PartitionSort.util;

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

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号正序排序,并根据考场进行分区,计算每个学生的总成绩
 */
public class PartitionMapper extends Mapper<LongWritable, Text,GradeSort, NullWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取行数据
        String line = value.toString();
        //分割数据
        String[] field = line.split("\t");
        //学号
        String id = field[1];
        //考场号
        int roomID = Integer.valueOf(field[2]);
        //语文成绩
        int chinese = Integer.valueOf(field[4]);
        //数学成绩
        int math = Integer.valueOf(field[5]);
        //英语成绩
        int english = Integer.valueOf(field[6]);
        //写到Reducer端
        context.write(new GradeSort(id,roomID,chinese,math,english),NullWritable.get());
    }
}

PartitionReducer类

package com.PartitionSort.util;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号正序排序,并根据考场进行分区,计算每个学生的总成绩
 */
public class PartitionReducer extends Reducer<GradeSort, NullWritable,GradeSort,NullWritable> {
    @Override
    protected void reduce(GradeSort key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        //写到Driver端
        context.write(key,values.iterator().next());
    }
}

PartitionDriver类

package com.PartitionSort.util;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按学号正序排序,并根据考场进行分区,计算每个学生的总成绩
 */
public class PartitionDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实力化Configuration对象
        Configuration conf = new Configuration();
        //创建任务
        Job job = Job.getInstance(conf);
        //指定jar包的位置
        job.setJarByClass(PartitionDriver.class);
        //关联Mapper类
        job.setMapperClass(PartitionMapper.class);
        //关联Reducer类
        job.setReducerClass(PartitionReducer.class);
        //设置Mapper输出的数据类型
        job.setMapOutputKeyClass(GradeSort.class);
        job.setMapOutputValueClass(NullWritable.class);
        //设置Reducer输出的数据类型
        job.setOutputKeyClass(GradeSort.class);
        job.setOutputValueClass(NullWritable.class);
        //设置分区
        job.setPartitionerClass(RoomIDPartition.class);
        //设置ReduceTasks的个数
        job.setNumReduceTasks(5);
        //设置输入的路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //设置输出的路径
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        //执行任务
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}

五、需求:按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生

RoomIDSort类

package com.SecondSort.util;

import org.apache.hadoop.io.WritableComparable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生
 */
public class RoomIDSort implements WritableComparable<RoomIDSort> {
    //学号
    private String id;
    //考场号
    private int roomID;
    //语文成绩
    private int chinese;
    //数学成绩
    private int math;
    //英语成绩
    private int english;
    //总成绩
    private int sum;

    //无参构造方法
    public RoomIDSort(){}
    //有参构造方法
    public RoomIDSort(String id, int roomID, int chinese, int math, int english){
        this.id = id;
        this.roomID = roomID;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = chinese + math + english;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getRoomID() {
        return roomID;
    }

    public void setRoomID(int roomID) {
        this.roomID = roomID;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }

    @Override
    public int compareTo(RoomIDSort object) {
        if (this.roomID > object.roomID){
            return 1;
        }else if (this.roomID < object.roomID){
            return -1;
        }else {
            return this.sum > object.sum?-1:1;
        }
    }

    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeUTF(id);
        dataOutput.writeInt(roomID);
        dataOutput.writeInt(chinese);
        dataOutput.writeInt(math);
        dataOutput.writeInt(english);
        dataOutput.writeInt(sum);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        id = dataInput.readUTF();
        roomID = dataInput.readInt();
        chinese = dataInput.readInt();
        math = dataInput.readInt();
        english = dataInput.readInt();
        sum = dataInput.readInt();
    }

    @Override
    public String toString() {
        return id + "\t" + roomID + "\t" + chinese + "\t" + math + "\t" + english + "\t" + sum;
    }
}

RoomIDPartition类

package com.SecondSort.util;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Partitioner;
/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生
 */
public class RoomIDPartition extends Partitioner<RoomIDSort, NullWritable> {
    @Override
    public int getPartition(RoomIDSort roomIDSort, NullWritable nullWritable, int i) {
        if (roomIDSort.getRoomID() == 2){
            return 0;
        }else if (roomIDSort.getRoomID() == 3){
            return 1;
        }else if (roomIDSort.getRoomID() == 5){
            return 2;
        }else if (roomIDSort.getRoomID() == 7){
            return 3;
        }else {
            return 4;
        }
//        return (roomIDSort.getRoomID() & Integer.MAX_VALUE) % i;
    }
}

SumSort类

package com.SecondSort.util;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;
/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生
 */
public class SumSort extends WritableComparator {
    protected SumSort() {
        super(RoomIDSort.class,true);
    }

    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        RoomIDSort roomIDSort1 = (RoomIDSort) a;
        RoomIDSort roomIDSort2 = (RoomIDSort) b;
        if (roomIDSort1.getRoomID() > roomIDSort2.getRoomID()){
            return 1;
        }else if (roomIDSort1.getRoomID() < roomIDSort2.getRoomID()){
            return -1;
        }else
            return 0;
    }
}

SecondMapper类

package com.SecondSort.util;

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

import java.io.IOException;
/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场号成绩最高的学生
 */
public class SecondMapper extends Mapper<LongWritable, Text,RoomIDSort, NullWritable> {

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取行数据
        String line = value.toString();
        //分割数据
        String[] field = line.split("\t");
        //学号
        String id = field[1];
        //考场号
        int roomID = Integer.parseInt(field[2]);
        //语文成绩
        int chinese = Integer.parseInt(field[4]);
        //数学成绩
        int math = Integer.parseInt(field[5]);
        //英语成绩
        int english = Integer.parseInt(field[6]);
        //写到Reducer端
        context.write(new RoomIDSort(id,roomID,chinese,math,english),NullWritable.get());
    }
}

SecondReducer类

package com.SecondSort.util;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生
 */
public class SecondReducer extends Reducer<RoomIDSort, NullWritable,RoomIDSort,NullWritable> {

    @Override
    protected void reduce(RoomIDSort key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        context.write(key,NullWritable.get());
    }
}

SecondDriver类

package com.SecondSort.util;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/*
 * @author Administrator
 * @version 1.0
 * @task 按考场号正序排序,按总成绩倒序排序,根据考场号进行分区,计算每个考场里成绩最高的学生
 */
public class SecondDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实力化Configuration对象
        Configuration conf = new Configuration();
        //创建任务
        Job job = Job.getInstance(conf);
        //指定jar包的位置
        job.setJarByClass(SecondDriver.class);
        //关联Mapper类
        job.setMapperClass(SecondMapper.class);
        //关联Reducer类
        job.setReducerClass(SecondReducer.class);
        //设置Mapper输出的数据类型
        job.setMapOutputKeyClass(RoomIDSort.class);
        job.setMapOutputValueClass(NullWritable.class);
        //设置Reducer输出的数据类型
        job.setOutputKeyClass(RoomIDSort.class);
        job.setOutputValueClass(NullWritable.class);
        //设置Reducer端的分组
        job.setGroupingComparatorClass(SumSort.class);
        //设置分区
        job.setPartitionerClass(RoomIDPartition.class);
        //设置ReduceTasks的个数
        job.setNumReduceTasks(5);
        //设置输入的路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //设置输出的路径
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        //执行任务
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}
Flowable第一篇、快速上手(Flowable安装、配置、集成) Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用 阅读详情

相关推荐

告别浏览器崩溃!EasyPlayer.js长时间播放FLV视频内存泄漏排查指南

本文针对EasyPlayer.js长时间播放FLV视频导致浏览器内存泄漏和崩溃的问题,提供了一套系统性排查与解决方案。核心策略包括将视频编码从H.265转为H.264以降低解码压力,以及将传输协议从HTTP-FLV切换至WebRTC以优化资源管理。文章还详细介绍了播放器实例生命周期管理、浏览器开发者工具监控等精细化排查手段,帮助开发者实现稳定、长时间的多路视频播放。

weixin_29229055的博客 175

大数据学习——MapReduce

具体实现bean对象序列化步骤如下。(1)实现Writable接口(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造(3)重写序列化和反序列化方法,同时要求顺序一致(4)如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序。默认分区通过key的hashCode对ReduceTask个数取模得到。

daybreak98的博客 1万+

Cursor3.0新界面使用说明

本文摘要:Cursor 3.x版本更新后,提供了两套主界面:Editor(类似VSCode的代码编辑器)和AgentsWindow(以AI智能体为中心的新界面)。Editor适合日常编码,AgentsWindow则支持并行运行多个AI任务、云端协作和多仓库管理。通过Ctrl+E可快速切换布局。文章详细介绍了AI聊天面板的操作技巧、四种工作模式(Agent/Plan/Ask/Debug)的区别,以及AgentsWindow的多任务管理功能。同时提供了Windows快捷键速查、中文化设置方法,并对比了新旧版本的

2501_90421497的博客 728

MapReduce运用-案例讲解

MapReduce 是 Google 公司开源的一项重要技术,它是一个编程模型,用以进行大数据量的计算。MapReduce 是一种简化的并行计算编程模型,它使那些没有多少并行计算经验的开发人员也可以开发并行应用程序。 模型非常方便使用,即使是对于完全没有分布式程序的程序员也是如此。它隐藏了并行计算的细节。MapReduce运行开发人员使用自己熟悉的语言进行开发。 通过MapReduce,应用程序可以在超过1000个节点的大型集群上运行,并且提供经过优化的错误容灾。

CDHong.it的技术分享博客 3719

VoLTE吞字断续优化方案

网络侧通过各节点探针的数据采集,能够进行RTP和RTCP包的分析,确定各节点的上行或下行丢包情况。1.基于测试语音分析,每2秒中大约8个字,每个字约10个RTP语音包。通话过程中,语音有短暂停顿,收音段听语音中会出现“吞字/断续现象”2.连续丢3~5个RTP以上就可能会出现吞字断续的感觉。下行评价的丢包问题,很难有效指导定界定位分析,无从下手。2.部分终端可能存在RTCP不反馈,导致无法获取丢包。1.语音包为UDP包,无反馈,终端无法判定是否丢包。终端可依据自身的调度反馈或弃包进行上行丢包判决。

m0_73503557的博客 1515

从零开始之驱动发开、linux驱动(七、字符驱动之led最终版)

我们上一接用的gpiolib非常杂乱,使用了两种 1.各硬件厂商实现的,如s3c_gpio_cfgpin(S5PV210_GPJ0(5), S3C_GPIO_SFN(1)) 2.系统公共的,如gpio_set_value(S5PV210_GPJ0(4),val) 其实公共的也是对各硬件厂商的封装,用那个都可以,个人建议用系统公共的,应为这样换芯片厂商,不影响任何使用。   2.错误处理基...

To_run_away的博客 2388

MapReduce入门

1.1 MapReduce定义 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。 Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。 1.2 MapReduce优缺点 1.2.1 优点 1)MapReduce易于编程。它简单的实现一些接口,就可以完...

知其然,知其所以然 445

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

七、大数据技术之Hadoop(MapReduce)

一、MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并行运行在一个Hadoop集群上。 1.2 MapReduce优缺点 1.2.1 优点 1)MapReduce 易于编程 它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序

qq_38132995的博客 4346

(第七章)FAST开发方法

摘要: FAST是一种轻量级、业务驱动的系统分析与开发框架,适用于中小型项目,强调快速交付和组件化开发。其核心包括8个阶段:范围定义、问题分析、需求分析、逻辑设计、决策分析、物理设计、构造测试和安装发布。特点为结构化、用户参与、迭代渐进,适合需求明确且需快速交付的项目。与RUP(重量级)、敏捷(极轻量)相比,FAST更侧重业务分析和模块化开发。软考中可通过口诀“范围问题求逻辑,决策物理构发布”记忆阶段,并掌握五大开发方法(瀑布、原型、FAST、RUP、敏捷)的核心区别及适用场景。

echo的博客 918

风光储并网对电力系统稳定性影响的仿真研究

本文研究了风光储并网对电力系统稳定性的影响,基于MATLAB/Simulink平台搭建了IEEE 9节点测试系统的风光储并网模型。研究对比了光储、风储和风光储三种并网配置在多种干扰下的稳定性表现。结果表明:光储系统对频率变化最敏感,风储系统具有更强的功率波动适应能力,而风光储联合系统通过互补效应展现出最佳综合稳定性。储能系统在所有配置中均显著改善了频率恢复性能,验证了其在新能源并网中的关键支撑作用。研究为高比例可再生能源电力系统的稳定运行提供了仿真依据和技术参考。

huanghm88的专栏 156

从零到一:手把手教你用 Hadoop MapReduce 实现“螺蛳粉销量排序”大数据应用

摘要:本文以柳州螺蛳粉电商销售数据为例,详细介绍了基于Hadoop-3.3.6集群的MapReduce全排序实战。通过5台虚拟机搭建集群,处理日均1.8亿条销售数据,从环境准备、需求拆解到程序开发、性能调优和可视化解读,完整呈现了大数据处理流程。重点讲解了MapReduce排序方案的选型优势、核心代码实现、性能优化6大技巧,并提供了生产级checklist和常见问题解决方案。案例展示了如何将70GB原始数据在30分钟内完成排序处理,最终通过Python可视化呈现销售趋势,为电商运营提供数据支持。文章兼具技术

hyy12_345的博客 728

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大数据技术原理与应用 第三篇 大数据处理与分析 (一) MapReduce

大数据技术原理与应用 第三篇 大数据处理与分析 MapReduce 知识点总结与理解

CNDefoliation的博客 1914

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大数据课程——MapReduce编程综合应用(2)

大数据课程——MapReduce编程综合应用(2) 实验内容以及要求 现有一份汽车销售记录,销售记录包括时间、地点、邮政编码、车辆类型等信息,每条记录信息包含39项数据项。请利用MapReduce框架,编写程序实现如下功能: (1)统计不同车型销售的年龄段分布情况,并分别按照车型和年龄段进行汇总(不考虑排序)。 注意:年龄段每10岁为1个年龄段(010、1120、21~30…) 输出格式参考如下: 车型1,年龄段1,300 车型1,年龄段1,300 … 车型1,年龄段2,300 … 车型2,年龄段1,30

weixin_43334251的博客 1738

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MapReduce简介

随着大数据时代的到来,

AndrewHoux的专栏 532

Hive是如何让MapReduce实现SQL操作的

前面我们说过MapReduce的运算流程,整体架构方法,JobTracker与TaskTracker之间的通信协调关系等等。虽然知道我们只需要自己完成Map和Reduce就可以实现MapReduce的运算,但是还有很多人习惯使用SQL进行数据分析,MapReduce编程不是那么容易,因此就有了Hive的存在。 首先看看如何用MapReduce实现SQL数据分析。 MapReduce实现SQL的原理...

weixin_44240370的博客 1794

大数据学习笔记(一)

  开始读《大数据时代》一书,为以后大数据方面的工作做做准备吧。虽然学习状态还是颇为浮躁的,但是多学一点是一点,多看一点是一点,多运动一点是一点,就以这种心态勉励自己继续积极学习和锻炼下去吧。   读一点书,查一查资料,做一点笔记,慢慢更新。 MapReduce思想(摘自百度百科)   在MapReduce里,Map处理的是原始数据,自然是杂乱无章的,每条数据之间互相没...

anaozhui5489的博客 111

【大数据技术基础】 课程 第1章 大数据技术概述 大数据基础编程、实验和案例教程(第2版)

这本书的标题是《大数据时代》,副标题为“生活、工作与思维的大变革”。这本书由维克托·迈尔-舍恩伯格(Viktor Mayer-Schönberger)和肯尼斯·库克耶(Kenneth Cukier)合著,由浙江人民出版社发行。这本书深入探讨了大数据如何改变我们的生活和工作方式,以及它对我们的思维方式带来的影响。书中讨论了大数据的潜力和挑战,以及如何在各个领域中利用大数据来获得洞察力和价值。这本书对于理解大数据的概念、应用和影响非常有帮助。

Kika写代码的博客 1172

大数据——大数据概况及Hadoop生态系统

大数据概况及Hadoop生态系统什么是大数据我们身边的大数据大数据特征4V特征固有特征分布式计算HadoopHadoop是什么Hadoop发展及版本使用Hadoop的原因Hadoop VS RDBMSHadoop生态圈ZookeeperHadoop架构HDFS特点HDFS CLI(命令行)hdfs dfsadminHDFSHDFS角色HDFS架构HDFS副本机制HDFS高可用(High Availability)HDFS读文件HDFS写文件HDFS文件格式 什么是大数据 大数据是指无法在一定时间内用常规软件

蜂蜜柚子加苦茶 517

MapReduce 编程实践

文章目录1. MapReduce 作业流程2. 实践2.1 启动 hadoop2.2 创建 java 项目 参考书:《Hadoop大数据原理与应用》 1. MapReduce 作业流程 2. 实践 2.1 启动 hadoop start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver # 第三条可以用下面的命令,上面的显示过期了,以后弃用 mapred --daemon start historyserver 2.2 创

Michael是个半路程序员 1534

MapReduce:分布式计算的基石

MapReduce 是一种强大的分布式计算模型,为处理海量数据提供了有效的方法。尽管 MapReduce 有一些局限性,但它仍然是大数据生态系统中的重要组成部分,并为后续的分布式计算框架奠定了基础. 希望本文能够帮助你更好地理解 MapReduce.MapReduce 是一种用于处理和生成大数据集的编程模型,以及一个用于执行该模型的关联实现。本文将深入探讨 MapReduce 的核心概念、工作原理、应用场景以及一些高级主题。它将复杂的计算任务分解成两个主要阶段:Map 阶段和 Reduce 阶段。

qq_44742109的博客 584

做为一名大数据新手,应该通过这篇文章了解大数据

一、大数据是什么? 大数据,big data,《大数据》一书对大数据这么定义,大数据是指不能用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。 这句话至少传递两种信息: 1、大数据是海量的数据 2、大数据处理无捷径,对分析处理技术提出了更高的要求 二、大数据的处理流程 下图是数据处理流程:   1、底层是数以千亿计的数据源,数据源可以是SCM(供应链数据),4PL(...

yalin7076的博客 440

MapReduce相关概念(自用)

MapReduce相关概念

m0_74027860的博客 1108

大数据入门---1.大数据介绍

大数据的介绍 无处不在的大数据 大数据的爆炸式增长 大数据的特征 大数据与我们的生活息息相关 思考:那么我们如何对这些数据进项存储与分析呢? 我们的hadoop就是在这样的场景下应运而生的 1. HADOOP背景介绍 1.1什么是HADOOP (1)HADOOP是apache旗下的一套开源软件平台 (2)HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 1. HADOOP的核心组件有 HDFS(分布式文件系统) MAP.

u014579001的博客 2201

【大数据学习-实验-5】MapReduce应用

1.编程实现WordCount实例。 package mapreduce; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop....

计忆芳华的博客 8056
上一篇: Hadoop报错-InvalidAuxServiceException:The auxService:mapreduce shuffle does not exist
下一篇: 大数据-MapReduce工作机制
JP-Destiny
博客等级 码龄8年 34粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值