• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Hadoop计数器的应用以及数据清洗

    数据清洗(ETL)

    在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。

    1.需求

    去除日志中字段长度小于等于11的日志。

    (1)输入数据

    web.log

    (2)期望输出数据

    每行字段长度都大于11

    2.需求分析

    需要在Map阶段对输入的数据根据规则进行过滤清洗。

    3.实现代码

    (1)编写LogMapper类

    package com.atguigu.mapreduce.weblog;
    import java.io.IOException;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    public class LogMapper extends Mapper<LongWritable, Text, Text, NullWritable>{
      Text k = new Text();
      @Override
      protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
       // 1 获取1行数据
       String line = value.toString();
       // 2 解析日志
       boolean result = parseLog(line,context);
       // 3 日志不合法退出
       if (!result) {
         return;
       }
       // 4 设置key
       k.set(line);
       // 5 写出数据
       context.write(k, NullWritable.get());
      }
      // 2 解析日志
      private boolean parseLog(String line, Context context) {
       // 1 截取
       String[] fields = line.split(" ");
       // 2 日志长度大于11的为合法
        if (fields.length > 11) {
         // 系统计数器
         context.getCounter("map", "true").increment(1);
         return true;
       }else {
         context.getCounter("map", "false").increment(1);
         return false;
       }
      }
    }

    (2)编写LogDriver类

    package com.atguigu.mapreduce.weblog;
    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.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    public class LogDriver {
      public static void main(String[] args) throws Exception {
    // 输入输出路径需要根据自己电脑上实际的输入输出路径设置
        args = new String[] { "e:/input/inputlog", "e:/output1" };
       // 1 获取job信息
       Configuration conf = new Configuration();
       Job job = Job.getInstance(conf);
       // 2 加载jar包
       job.setJarByClass(LogDriver.class);
       // 3 关联map
       job.setMapperClass(LogMapper.class);
       // 4 设置最终输出类型
       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(NullWritable.class);
       // 设置reducetask个数为0
       job.setNumReduceTasks(0);
       // 5 设置输入和输出路径
       FileInputFormat.setInputPaths(job, new Path(args[0]));
       FileOutputFormat.setOutputPath(job, new Path(args[1]));
       // 6 提交
       job.waitForCompletion(true);
      }
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:shell脚本之nginx自动化脚本
    下一篇:linux中各种锁机制的使用与区别详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Hadoop计数器的应用以及数据清洗 Hadoop,计数器,的,应用,以及,