首页 > 其他分享 >MapReduce经典案例————数据去重

MapReduce经典案例————数据去重

时间:2024-11-17 12:49:03浏览次数:3  
标签:经典 jar hadoop MapReduce 案例 test import apache org

目录

一、问题介绍

二、实验工具 

三、案例实现

1.打开idea,单击“file->new->project”,设置项目名称为“Hadoop_test”,在对话框下部的“Advanced Settings”中设置Groupid为“cn.lyy”。​编辑

2.从左侧项目结构中打开pom.xml,并输入如下依赖:​编辑

  2.1pom.xml:

3. 从左侧项目结构中选中src-main-java,单击鼠标右键,选择New->java class.

4. 在出现的对话框中输入“DedupDriver”回车建立新类,使用同样方法建立“DedupMapper”、“DedupReducer”类。

5. 依次在每个类中输入相关代码

  5.1DedupDriver类:

  5.2DedupMapper类:

  5.3DedupReducer类:

6. 打包jar,首先打开project structure,然后单击Artifacts,Name输入“hadoop_test”,然后将右侧hadoop_test compile output双击加入左侧hadoop_test.jar,单击OK。

7.单击菜单中的build,选择buile artifact->build,左侧项目结构中出现hadoop_test.jar​编辑

8.使用XFTP8上传jar。

9.运行程序。

  9.1随便写两个文件我这里是data1.txt和data2.txt  ,展示如下(使用cat命令展示)。

  9.2添加文件data1.data2并上传HDFS 的 /input 目录,在终端输入“hadoop jar hadoop_test.jar DedupDriver”,运行结果如图所示。

10.验证结果输出。

  10.1使用hdfs dfs -cat /output/*  查看输出,去重成功!


一、问题介绍

数据去重是识别并去除数据集中重复数据,保障数据单元唯一性的关键处理操作,如处理客户信息数据库中的重复记录。

二、实验工具 

1.虚拟机:VM虚拟机

教程:安装虚拟机(VMware)保姆级教程(附安装包)_vmware虚拟机-CSDN博客

2.远程连接终端软件:Xshell 和 Xftp (配套软件我只能说很好用可视化很强)

下载地址:家庭/学校免费 - NetSarang Website

3.JAVA

         (当然你也可以用别的虚拟机和远程连接终端软件本人用的就是上面的工具)

三、案例实现

1.打开idea,单击“file->new->project”,设置项目名称为“Hadoop_test”,在对话框下部的“Advanced Settings”中设置Groupid为“cn.lyy”。

2.从左侧项目结构中打开pom.xml,并输入如下依赖:

  2.1pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>hadoop_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

3. 从左侧项目结构中选中src-main-java,单击鼠标右键,选择New->java class.

4. 在出现的对话框中输入“DedupDriver”回车建立新类,使用同样方法建立“DedupMapper”、“DedupReducer”类。

5. 依次在每个类中输入相关代码

  5.1DedupDriver类:
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 java.io.IOException;

public class DedupDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "Deduplication");

        job.setJarByClass(DedupDriver.class);

        job.setMapperClass(DedupMapper.class);
        job.setCombinerClass(DedupReducer.class);  // 添加 Combiner 以减少中间重复数据
        job.setReducerClass(DedupReducer.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);

        FileInputFormat.addInputPath(job, new Path("/input"));
        FileOutputFormat.setOutputPath(job, new Path("/output"));

        boolean res = job.waitForCompletion(true);
        System.exit(res ? 0 : 1);
    }
}
  5.2DedupMapper类:
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class DedupMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // 将每一行文本作为一个唯一的键输出,NullWritable表示没有附加的值
        context.write(value, NullWritable.get());
    }
}
  5.3DedupReducer类:
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class DedupReducer extends Reducer<Text, NullWritable, Text, NullWritable> {
    @Override
    protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        // 对于每一个唯一的键,只输出一次
        context.write(key, NullWritable.get());
    }
}

6. 打包jar,首先打开project structure,然后单击Artifacts,Name输入“hadoop_test”,然后将右侧hadoop_test compile output双击加入左侧hadoop_test.jar,单击OK。

7.单击菜单中的build,选择buile artifact->build,左侧项目结构中出现hadoop_test.jar

8.使用XFTP8上传jar。

9.运行程序。

  9.1随便写两个文件我这里是data1.txt和data2.txt  ,展示如下(使用cat命令展示)。

  9.2添加文件data1.data2并上传HDFS 的 /input 目录,在终端输入“hadoop jar hadoop_test.jar DedupDriver”,运行结果如图所示。

10.验证结果输出。

  10.1使用hdfs dfs -cat /output/*  查看输出,去重成功!

标签:经典,jar,hadoop,MapReduce,案例,test,import,apache,org
From: https://blog.csdn.net/2401_82808073/article/details/143816014

相关文章

  • 专题课:综合案例6
    随机产生验证码首先,我们得想清楚,如何从数组里面随机取出一个元素,只要我们能从数组里取出1个元素,接下来再随机取出4个,不就组成一个验证码了么.1.取出一个随机元素:说到随机,我们肯定会想到随机数,但我们该如何让随机数与我们的数组元素产生联系呢?答:数组不管是什么类型,它肯定会......
  • JVM---JDBC案例是否真的打破了双亲委派机制的思考
    首先先来了解一下数据库驱动的加载过程:数据库驱动加载的过程我们先来看看Java中SPI定义的一个核心类:DriverManager,该类位于rt.jar包中,是Java中用于管理不同数据库厂商实现的驱动,同时这些各厂商实现的Driver驱动类,都继承自Java的核心类java.sql.Driver,如MySQL的com.mysql.c......
  • HarmonyOS Next 助力在线教育:网络优化实战案例
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在线教育在当今社会中发挥着......
  • 穿越银河的CSS魔法:重现《星球大战》经典开场
    1.引言《星球大战》(StarWars)是一部经典的科幻电影系列,其独特的开场动画和视觉效果深受观众喜爱。本文将介绍如何使用HTML和CSS来创建一个具有《星球大战》风格的动画效果,包括“Star”和“Wars”标志的淡入效果,以及标题“TheForceAwakens”中每个字母的逐个淡入效果。具......
  • CODESYS可视化标准计算器制作详细案例(一)
    #制作一个在可视化界面可用于标准计算器功能详细案例#前言:在可视化界面或触摸屏上,很少有带计算器功能的脚本程序,当我们在工控现场需要使用计算器时,往往依靠电脑或手机上的计算器,如果把计算器的功能移值到界面上,或者为PLC提供一个计算公式,那么,非常方便的即时使用,也可以将结......
  • Jarvis March算法详解及Python实现(附设计模式案例)
    目录JarvisMarch算法详解及Python实现(附设计模式案例)第一部分:JarvisMarch算法概述与原理1.1什么是JarvisMarch算法?1.2算法原理1.3算法流程1.4时间复杂度第二部分:JarvisMarch算法的Python实现(面向对象设计)2.1面向对象设计2.2代码实现2.3代......
  • 专题课:综合案例5
    评委打分解答:1.首先肯定要键盘录入6个评委的分数6个评委的分数,即6个变量,我们肯定用数组更加方便,因为后面求和求最大值之类的,用数组都更简单遍历数组,我们每键盘打出一个元素就将其放入数组中.2.然后定义求和变量,将6个分数求和3.for循环搭配if筛选求最大、最小值4.求平......
  • 【软考】系统架构设计师-2020年下半年下午案例真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2020年下半年下午试卷 案例试题一 某公司拟开发一套在线软件开发系统,支持用户通过浏览器在线进行软件开发活动。该系统的主要功能包括代码编辑、语法高亮显示、代码编译、系统调试、代码仓库管理等。......
  • 深入浅出:Java 中的经典排序算法详解与实现
    文章目录1.冒泡排序(BubbleSort)基本思路详细步骤Java实现2.插入排序(InsertionSort)基本思路详细步骤Java实现3.选择排序(SelectionSort)基本思路详细步骤Java实现4.快速排序(QuickSort)基本思路详细步骤Java实现5.归并排序(MergeSort)基本思路......
  • VisionPro机器视觉案例 之 火花塞
    第六篇机器视觉案例之火花塞文章目录第六篇机器视觉案例之火花塞1.案例要求2.实现思路2.1A尺寸测量2.2B尺寸测量2.3C尺寸测量3.使用控件3.1模板匹配工具——CogPMAlignTool3.2找线工具——CogFindLineTool3.3画线工具——CogCreateLineTool3.4点到......