Hadoop实现数据清洗ETL
准备
LKh7zAJ4nwo TheReceptionist 653 Entertainment 424 13021 4.34 1305 744 DjdA-5oKYFQ NxTDlnOuybo c-8VuICzXtU DH56yrIO5nI W1Uo5DQTtzc E-3zXq_r4w0 1TCeoRPg5dE yAr26YhuYNY 2ZgXx72XmoE -7ClGo-YgZ0 vmdPOOd6cxI KRHfMQqSHpk pIMpORZthYw 1tUDzOp10pk heqocRij5P0 _XIuvoH6rUg LGVU5DsezE0 uO2kj6_D8B4 xiDqywcDQRM uX81lMev6_o
这是一行我们准备清洗的数据,它的每个数据的意思是(依次)
视频唯一id 视频上传者 视频年龄 视频类别 视频长度 观看次数 视频评分 流量 评论数 相关视频id
要注意的是:
- 视频类别:可能有多个分类,中间要以&分割,但是在有的数据中会以如下形式显示
People & Blogs & 中间有空格,我们要处理掉它
- 相关电影id是以tab(" \t ")分割的,我们要将他换为空格
- 有的电影没有相关电影,我们要将这些数据过滤掉
了解需求后,我们开始做!
环境
IDEA + Maven +hadoop
相关依赖
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency></dependencies>
代码
Mapper代码
public class ETLMapper extends Mapper<LongWritable,Text,Text,NullWritable> {Text k=new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//获取一行String s = value.toString();//数据清理String s1 = ETLUtil.FormatString(s);//传递数据if(s1==null) return;k.set(s1);context.write(k,NullWritable.get());}
}
ETL工具类:
package util;public class ETLUtil {public static String FormatString(String s){//切割数据String[] split = s.split("\t");//过滤脏数据if(split.length<9){return null;}//数据替换split[3]=split[3].replace(" ","");//将空格去掉StringBuilder sb=new StringBuilder();//类型拼接for(int i=0;i<split.length;i++){if(i<9){if(i==split.length-1){sb.append(split[i]);}else{sb.append(split[i]+"\t");}}else {if(i==split.length-1){sb.append(split[i]);}else{sb.append(split[i]+"&");}}}return sb.toString();}}
驱动类 :
package etl;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;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;public class ETLDriver implements Tool {private Configuration configuration;public int run(String[] strings) throws Exception {//创建JobJob job = Job.getInstance(configuration);//设置运行环境job.setJarByClass(ETLDriver.class);//设置对应的MapperReduce类job.setMapperClass(ETLMapper.class);//设置Mapper输出的job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);//设置全局的输出job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);//设置输出输入路径FileInputFormat.setInputPaths(job,new Path(strings[0]));FileOutputFormat.setOutputPath(job,new Path(strings[1]));//不需要reducejob.setNumReduceTasks(0);//提交job.submit();return 1;}public void setConf(Configuration configuration) {this.configuration=configuration;}public Configuration getConf() {return configuration;}//主函数public static void main(String[] args) throws Exception{ToolRunner.run(new ETLDriver(),args);}
}
测试运行
我们在windows上测试运行了代码,按照要求完成了相应的任务
取一条数据看看
Gnbls__5gdo ggagnisevidal 699 People&Blogs 132 15 0 0 0 FDz8KaArjOA&O1F8tm0kY44&zq_NPp6-zUY&EvtlRc_G9DA&gL5aFyBlucE&1pGjSJD35AU&QGkOy0_uoOM&NbjQ-lTYgvo&_62f9_ylrjg&SX1FY9pxrhw&ITeraiadbJA&ZZZADbubu0Y&4JhAswOQV1Y&mLeOiDF99Yo&BrdO9GagGoM&gij1PytzQNg&wkvCDCOGzGc&5pdG8PZjVog&l8k-5CA2PKY&_iCmluYaOyI
很nice!
打包,放到集群上使用
双击
jar就在这
Hadoop实现数据清洗ETL相关推荐
- Hadoop数据压缩 与 数据清洗ETL
目录 一.压缩概述 优缺点 原则 二.MR 支持的压缩编码 三.压缩方式选择 Gzip压缩 Bzip2 压缩 Lzo压缩 Snappy压缩 压缩位置选择 四.压缩参数配置 五.压缩案例 六.数据清洗E ...
- Hadoop之数据清洗
Hadoop之数据清洗 数据清洗(ETL) 在运行核心业务MapReduce程序之前,往往需要先对数据进行清洗,清 理掉不符合用户要求的数据,清理的过程往往只需要运行Mapper程序,不 需要运行 ...
- Kettle构建Hadoop ETL实践(六):数据转换与装载
目录 一.数据清洗 1. 处理"脏数据" 2. 数据清洗原则 3. 数据清洗实例 (1)身份证号码格式检查 (2)去除重复数据 (3)建立标准数据对照表 二.Hive简介 1 ...
- (超详细)大数据Hadoop之MapReduce组件
一.MapReduce 简介 1.1 MapReduce的概述 在Hadoop生态圈中,MapReduce属于核心,负责进行分布式计算. MapReduce 核心功能是将用户编写的业务逻辑代码和自带默 ...
- MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)
文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...
- 七、Hadoop简明笔记
目录 1.Hadoop入门 1.1 Hadoop优势 1.2 Hadoop1.x.Hadoop2.x.Hadoop3.x的区别 1.3 HDFS架构概述 1.4 YARN架构概述 1.5 MapRed ...
- Hadoop详细教程
1.Hadoop入门 版本信息:hadoop-3.1.0 1.1集群配置 NameNode 和 SecondaryNameNode 不要装在同一台服务器 ResourceManager也很耗内存不要和 ...
- Hadoop:MapReduce应用
文章目录 一.Join多种应用 1.1 Reduce Join 1.2 Map Join 二.计数器应用 三.数据清洗(ETL) 四.MapReduce开发总结 一.Join多种应用 1.1 Redu ...
- 中国移动集中化BI探索:数据仓库与Hadoop混搭
随着移动互联网.物联网/传感器等技术的发展,全球数据生产速度正在高速增长,信息已成为企业的战略资产.而运营商作为网络时代的数据交换中心,其网络管道.业务平台.支撑系统中每天都在产生大量有价值的数据,基 ...
最新文章
- 男人最不该做的7件事
- 不正确的c语言语句是,最基本的C语言语句是( )
- 页面重新跳转到父类url
- Linux开启动过程详解
- hdu 5903 Square Distance
- 能源结构进入变革时代 光伏业趋于壮大转型
- Ubuntu系统的安装
- 关于开发系统后门软件的几点思路
- JQuery快速入门-选择器
- python import _ssl_Python 3没有名为’_ssl’的模块
- python如何读取txt数据库_详解Python如何读取MySQL数据库表数据
- Java带有效期的Map
- Word 紧贴表格之后添加新行
- 2019支付宝小程序技术专场招募
- 元宇宙火了,智能家居跟不跟?
- 技术入股创业一年,家庭收入变成负5万
- 对于气缸型号表示的内容与与含义说明
- python re.compile() 详解——Python正则表达式
- jquery 如何使用innerHTML
- android中如何保存对象集合中,如何序列化对象并将其保存到Android中的文件?
热门文章
- 0基础快速入门Python,小白必看
- Https请求报错:unable to find valid certification path to requested target
- 十二指肠溃疡患者秋天如何调养
- Oracle开发者中级第7课(层级查询)实验
- 算法岗的招聘现状与未来
- 【笔记】微信开发者工具自定义编译模式(编译时,携带 指定参数 直接跳转 指定页面)
- python学习笔记之word文档提取
- java.nio.file.NoSuchFileException异常解决
- 成都建博会:家居行业数字营销金点子 句句戳心坎,先收藏
- (附源码)ssm学校疫情服务平台 毕业设计 291202