mapreduce实现数据去重
原文链接:
https://www.toutiao.com/i6764933201203823107/
概念:"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。
数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。在MapReduce流程中,map的输出<key,value>经过shuffle过程聚集成<key,value-list>后交给reduce。我们自然而然会想到将同一个数据的所有记录都交给一台reduce机器,无论这个数据出现多少次,只要在最终结果中输出一次就可以了。具体就是reduce的输入应该以数据作为key,而对value-list则没有要求(可以设置为空)。当reduce接收到一个<key,value-list>时就直接将输入的key复制到输出的key中,并将value设置成空值,然后输出<key,value>。
假如我们的数据源是:
目的:编写MapReduce程序,根据商品id进行去重,统计用户品中都有哪些商品。
我们先准备模拟生成数据,编写Java代码
创建一个项目,包结构和类如下
生成随机数
生成随机日期
编写IO
编写生成代码
数据生成
创建Maven项目
配置pom文件
创建数据去重类
编写Map和Reduce
打包项目
启动Hadoop
将数据上传
将数据上传到HDFS上
执行jar包
yarn jar /data/removal/removal-client.jar com.xlglvc.xxx.mapredece.removal.Removal /removalinput/data.txt /removaloutput
我们查看下效果
练习:我们可以再写一个mapreduce,统计里面有多少数据?