目录

一、问题介绍

二、实验工具 

三、案例实现

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/*  查看输出,去重成功!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐