当前位置: 首页 > news >正文

Hadoop3教程(十九):MapReduce之ETL清洗案例

文章目录

  • (121)ETL数据清洗案例
  • 参考文献

(121)ETL数据清洗案例

ETL,即Extract-Transform-Load的缩写,用来描述数据从源端,经过抽取(Extract)、转换(transform),最后加载(load)到目标端的处理过程。

ETL主要应用于数据仓库,但不只是应用于数据仓库,毕竟这个更像是一类思想。

在运行核心的MR程序之前,往往要对数据进行清理,清除掉不符合用户要求的数据,比如说空数据等。这个清理的过程就可以通过启动一个Mapper来实现,不需要运行Reducer。

接下来,教程还是以一个实际需求案例展开描述:去除日志中字段个数小于等于11的日志。

输入数据:一个web.log文件;

输出数据:每行字段长度都大于11;

核心思想很简单,就是map()中编写好规则后,对输入的数据进行过滤清洗,再输出就行。

过程实现也很简单,过了一遍代码,直接贴在下面:

编写WebLogMapper类

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 WebLogMapper extends Mapper<LongWritable, Text, Text, NullWritable>{@Overrideprotected 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 日志合法就直接写出context.write(value, NullWritable.get());}// 2 封装解析日志的方法private boolean parseLog(String line, Context context) {// 1 截取String[] fields = line.split(" ");// 2 日志长度大于11的为合法if (fields.length > 11) {return true;}else {return false;}}
}

编写WebLogDriver类

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

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
http://www.lryc.cn/news/199281.html

相关文章:

  • 数据库设计阶段-架构真题(五十七)
  • python控制Windows桌面程序自动化模块uiautomation
  • Serializable 和Parcelable的区别
  • dubbogo-02 将服务注册到nacos
  • postgresql 配置文件 与 修改配置如何启用
  • 物联网专业前景怎么样?
  • JVM垃圾回收算法介绍
  • 紫光同创FPGA实现HSSTLP高速接口通信,8b/10b编解码数据回环,提供PDS工程源码和技术支持
  • Web前端—盒子模型:选择器、PxCook、盒子模型、正则表达式、综合案例(产品卡片与新闻列表)
  • C++ vector类模拟实现
  • FastAPI+Pydantic使用自定义参数校验+自定义异常+全局异常捕获
  • Python综合练习题
  • SpringCloud+Nacos集成Seata-1.7.0分布式事务
  • 任务调度框架-如何实现定时任务+RabbitMQ事务+手动ACK
  • 修炼k8s+flink+hdfs+dlink(六:学习k8s)
  • 红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接
  • Qt Designer生成ui文件,如何转py文件,如何运行
  • Python数据挖掘:自动售货机销售数据分析与应用
  • 【设计模式】设计模式概述
  • 第六届“中国法研杯”司法人工智能挑战赛进行中!
  • 关于 passing ‘const xx’ as ‘this’ argument of 的错误
  • 数据结构和算法(13):优先级队列
  • 面试经典150题——Day15
  • web APIs——第一天(上)
  • 【Leetcode】215. 数组中的第K个最大元素
  • 服务器数据恢复-RAID5常见故障的数据恢复方案
  • 12个VIM编辑器的高级玩法
  • ⽜客论坛的笔记
  • JS逆向分析某枝网的HMAC加密、wasm模块加密
  • 论坛介绍|COSCon'23开源商业(V)