美文网首页
1.2.2.5MapReduce实例

1.2.2.5MapReduce实例

作者: 寒暄_HX | 来源:发表于2020-03-21 11:42 被阅读0次

总目录:https://www.jianshu.com/p/e406a9bc93a9

Hadoop - 子目录:https://www.jianshu.com/p/9428e443b7fd

天气案例

经典案例

myclient.java :客户端

package com.SL.tq;

import java.io.IOException;

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

public class MyClient {
    
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        
        Configuration conf = new Configuration(true);
        Job job = Job.getInstance(conf);
        
        job.setJarByClass(com.SL.tq.MyClient.class);
        
        //-----conf-----
        //++map:
//      输入格式化:job.setInputFormatClass(ooxx.class);
        
        job.setMapperClass(TMaper.class);
        job.setMapOutputKeyClass(TQ.class);
        job.setMapOutputValueClass(IntWritable.class);
        
        job.setPartitionerClass(TPartitioner.class);
        
        job.setSortComparatorClass(TsortComparator.class);
        
//      job.setCombinerClass(TCombiner.class);
        
        //++reduce:
        
        job.setGroupingComparatorClass(TGroupingComparator.class);
        
        job.setReducerClass(TReducer.class);
        
        
        //++输入输出
        
        Path input = new Path("hdfs://192.168.110.110:9000/data/tq/input");
        FileInputFormat.addInputPath(job,input);
        
        Path output = new Path("hdfs://192.168.110.110:9000/data/tq/output");
        if(output.getFileSystem(conf).exists(output)) {
            output.getFileSystem(conf).delete(output,true);
        }
        FileOutputFormat.setOutputPath(job,output);
        
        job.setNumReduceTasks(2); 
        
        //--------------
        
        
        job.waitForCompletion(true);
    }

}

TMaper.java : map程序

package com.SL.tq;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.text.ParseException;

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


public class TMaper extends Mapper<LongWritable,Text,TQ,IntWritable>{
    TQ mkey = new TQ();
    IntWritable mval = new IntWritable();
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, TQ, IntWritable>.Context context)
            throws IOException, InterruptedException {
//  1949-10-01  14:21:02    34c
        try{
            String[] strs = StringUtils.split(value.toString(),"\t");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = sdf.parse(strs[0]);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            
            mkey.setYear(cal.get(Calendar.YEAR));
            mkey.setMonth(cal.get(Calendar.MONTH)+1);
            mkey.setDay(cal.get(Calendar.DAY_OF_MONTH));
            
            int wd = Integer.parseInt(strs[1].substring(0,strs[1].length()-1));
            mkey.setWd(wd);
            mval.set(wd);
            System.out.println(mkey+"  "+mval);
            context.write(mkey, mval);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    }
    
}

TPartitioner.java :分区器

package com.SL.tq;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Partitioner;

public class TPartitioner extends Partitioner<TQ, IntWritable> {
    @Override
    public int getPartition(TQ key, IntWritable value, int numPartitions) {
        
        return key.hashCode() % numPartitions;
    }
}

TsortComparator.java :排序比较器

package com.SL.tq;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

public class TsortComparator extends WritableComparator{
    
    public TsortComparator() {
        super(TQ.class,true);
    }
    
    @Override
    public int compare(WritableComparable a, WritableComparable b){
        TQ t1 = (TQ)a;
        TQ t2 = (TQ)b;
        
        int c1 = Integer.compare(t1.getYear(), t2.getYear());
        if (c1 == 0) {
            int c2 = Integer.compare(t1.getMonth(),t2.getMonth());
            if(c2 == 0) {
                return Integer.compare(t1.getWd(),t2.getWd());
            }
            return c2;
        }
        return c1;
    }

}

TQ.java :序列化

package com.SL.tq;

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

import org.apache.hadoop.io.WritableComparable;

public class TQ implements WritableComparable<TQ>{
    
    
    private int year;
    private int month;
    private int day;
    private int wd;
    
    

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getWd() {
        return wd;
    }

    public void setWd(int wd) {
        this.wd = wd;
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeInt(year);
        out.writeInt(month);
        out.writeInt(day);
        out.writeInt(wd);
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        this.year=in.readInt();
        this.month=in.readInt();
        this.day=in.readInt();
        this.wd=in.readInt();
    }

    @Override
    public int compareTo(TQ that) {
        // 约定俗称:日期正序
        
        int c1 = Integer.compare(this.year,that.getYear());
        
        if(c1 == 0) {
            int c2 = Integer.compare(this.month,that.getMonth());
            if (c2 == 0) {
                return Integer.compare(this.day, that.getDay());
            }
            return c2;
        }
        
        
        return c1;
    }
    
    

}

TsortComparator .java :自定义排序

package com.SL.tq;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

public class TsortComparator extends WritableComparator{
    
    public TsortComparator() {
        super(TQ.class,true);
    }
    
    @Override
    public int compare(WritableComparable a, WritableComparable b){
        TQ t1 = (TQ)a;
        TQ t2 = (TQ)b;
        
        int c1 = Integer.compare(t1.getYear(), t2.getYear());
        if (c1 == 0) {
            int c2 = Integer.compare(t1.getMonth(),t2.getMonth());
            if(c2 == 0) {
                return Integer.compare(t1.getWd(),t2.getWd());
            }
            return c2;
        }
        return c1;
    }

}

相关文章

  • 1.2.2.5MapReduce实例

    总目录:https://www.jianshu.com/p/e406a9bc93a9 Hadoop - 子目录:h...

  • SQL C语言基本操作

    相关API 打开 实例 关闭 实例 获取错误消息 操作表 实例创建 实例插入 实例修改 实例删除 实例回调查询 非回调

  • Python-数据类型及其操作方法

    数字类型 代码实例: 字符串类型 代码实例: 列表 代码实例: 元组 代码实例 字典: 代码实例 集合 代码实例:

  • HTML基础-03

    HTML 标题 实例 HTML 段落 实例 HTML 链接 实例 HTML 图像 实例

  • Python 类属性、实例属性、类方法、实例方法

    1、实例属性 实例属性,就是赋给由类创建的实例的属性,实例属性属于它所属的实例,不同实例之间的实例属性可以不同。 ...

  • STL算法之常用拷贝和替换

    copy API 实例 replace API 实例 replace_if API 实例 swap API 实例

  • Vue 基础

    Vue 实例 1. Vue实例 2. 实例属性 3. 实例方法/数据 4. 实例方法/事件 5. 实例方法/生命周...

  • 类中的方法

    1.实例方法的调用方式 实例对象.实例方法() 类对象.实例方法(实例对象) 例如: class Student ...

  • C语言100例

    C 练习实例01C 练习实例02C 练习实例03C 练习实例04C 练习实例05C 练习实例06 C 练习实例07...

  • AWS云计算助手级架构师认证之EC2-实例购买类型

    在购买EC2实例的时候,这里有三种购买类型需要理解:按需实例,预留实例,计划实例,竞价实例。 按需实例: ...

网友评论

      本文标题:1.2.2.5MapReduce实例

      本文链接:https://www.haomeiwen.com/subject/tvlyyhtx.html