hadoop中MapReduce的简单操作

package com.zyc.hadoop.mapreduce.flow;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
* Created with IntelliJ IDEA.
*
* @Author: zyc2913@163.com
* @Date: 2020/9/11 14:29
* @Version: 1.0
* @Description: MapReduce实现日志查找ip、上传流量、下载流量和总流量
*/
public class WebLogLoadFlow {
    public static void main(String[] args) throws Exception {
        //1.获取job实例
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        //2.设置job运行的主类
        job.setJarByClass(WebLogLoadFlow.class);

        //3.设置Mapper的主类
        job.setMapperClass(WLLFMapper.class);

        //4.设置Reducer的主类
        job.setReducerClass(WLLFReducer.class);

        //5.设置Mapper输出的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(WebLog.class);

        //6.设置Reducer输出的类型
        job.setOutputKeyClass(NullWritable.class);
        job.setOutputValueClass(WebLog.class);

        //7.设置job的输入路径
        FileInputFormat.setInputPaths(job,new Path("C:\\Users\\Administrator\\Desktop\\book\\mylog"));

        //8.设置job的输出路径
        FileOutputFormat.setOutputPath(job,new Path("C:\\Users\\Administrator\\Desktop\\loadflows"));

        //9.设置MapReduce的输入格式(默认使用的是TextInPutFormat)
        job.setInputFormatClass(SequenceFileInputFormat.class);

        System.exit(job.waitForCompletion(true) ? 0 : 1 );
    }
    public static class WLLFMapper extends Mapper<Text,Text,Text,WebLog>{
        Text k = new Text();

        @Override
        protected void map(Text key, Text value, Context context) throws IOException, InterruptedException {
            for (String line: value.toString().split("\n")) {
                String[] strs = line.split(" ");
                String ip = strs[0];
                long up = 0;
                long down = 0;
                try {
                    up = Long.parseLong(strs[9]);
                    down = Long.parseLong(strs[strs.length-1]);
                }catch (Exception e){
                }
                WebLog webLog = new WebLog(ip, up, down);
                k.set(ip);
                context.write(k,webLog);
            }
        }
    }
    public static class WLLFReducer extends Reducer<Text,WebLog, NullWritable,WebLog>{
        @Override
        protected void reduce(Text key, Iterable<WebLog> values, Context context) throws IOException, InterruptedException {
            long totalUp = 0;
            long totalDown = 0;
            for (WebLog value:values) {
                totalUp += value.getUp();
                totalDown += value.getDown();
            }
            WebLog v = new WebLog(key.toString(), totalUp, totalDown);
            context.write(NullWritable.get(),v);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值