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

文章目录

(121)ETL数据清洗案例

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

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

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

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

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

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

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

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

编写WebLogMapper类

java 复制代码
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>{
	
	@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 日志合法就直接写出
		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类

java 复制代码
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 关联map
		job.setMapperClass(WebLogMapper.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 提交
         boolean b = job.waitForCompletion(true);
         System.exit(b ? 0 : 1);
	}
}

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
相关推荐
建群新人小猿1 小时前
陀螺匠企业助手——组织框架图
android·java·大数据·开发语言·容器
mifengxing1 小时前
操作系统(一)
大数据·数据库·操作系统
资讯雷达1 小时前
2026 年,GEO 优化如何选?风信子传媒:以“内容生态+智能分发”重塑品牌 AI 认知
大数据·人工智能·传媒
中科天工2 小时前
当智能包装行业迎来新机遇,如何驾驭发展趋势?
大数据·人工智能·智能
wan9zhixin2 小时前
2026年1月变电设备六氟化硫泄漏检测仪品牌推荐
大数据·网络·人工智能
大鳥2 小时前
企业级 Hive on Spark 开发规范
hive·hadoop·spark
私域合规研究3 小时前
2026年私域的八大挑战及发展方向
大数据·人工智能
福客AI智能客服3 小时前
专业适配破局:AI客服软件与电商智能客服重塑日用品服务生态
大数据·人工智能
摩西蒙3 小时前
业务监控和常用产品
java·大数据·人工智能
AI-小柒4 小时前
从零入门大语言模型(LLM):系统学习路线与实践指南
大数据·开发语言·人工智能·学习·信息可视化·语言模型·自然语言处理