前言

本文假设读者已经在 WSL (Ubuntu 22.04) 环境下完成了 Hadoop 单机伪分布式安装,如果尚未完成,可以参考这篇博客。笔者使用 IDEA Ultimate 2024.1.1 进行远程开发,IEDA 不同版本的安装过程和操作 UI 可能有些许不同,具体请参照官方文档

新建 Maven 项目

点击窗口左上角 “文件-新建-项目”,按照下图标注创建一个 Maven 示例项目。

image-20240522101759256

配置项目依赖

等待项目初始化并加载完毕后,打开 pom.xml 文件配置项目依赖。如果你的开发情境与笔者类似,可以将 pom.xml 直接复制替换为本文末尾给出的配置文件。

首先,自定义项目信息并修改项目属性为以下内容:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <hadoop.version>3.3.6</hadoop.version>
</properties>
⚠️ 注意: 这里的 hadoop.version 需要与运行环境中的 Hadoop 版本一致!

然后,添加 Hadoop 相关的依赖:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>${hadoop.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>${hadoop.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>${hadoop.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>${hadoop.version}</version>
</dependency>

对于本地环境与集群环境 Hadoop 版本不一致的情况,可以通过添加 profile 解决,具体配置如下:

<profiles>
    <profile>
        <id>Cluster</id>
        <properties>
            <hadoop.version>3.2.1</hadoop.version>
        </properties>
    </profile>
</profiles>

最后,点击窗口右上角的刷新按钮更新项目配置。

image-20240522103520820

编写代码

完成以上配置后,就可以开始在项目的 src/main/java 目录下添加代码文件了。

项目打包

完成代码编写后,按照下图标注进行打包,如果前面配置了 profile,按需勾选即可。

image-20240522104223665

如果打包成功,输出日志应该与下面类似:

[INFO] Building jar: /home/jjl9807/Dev/lab2/target/lab2-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.415 s
[INFO] Finished at: 2024-05-20T19:19:50+08:00
[INFO] ------------------------------------------------------------------------

打包好的 JAR 包位于项目的 target 目录下,拷贝到运行环境就可以执行了。

image-20240522104440201

pom.xml 示例

最后,给出一份笔者自己使用的项目配置:

<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>lab2</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>lab2</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <hadoop.version>3.3.6</hadoop.version>
    </properties>

    <profiles>
        <profile>
            <id>Cluster</id>
            <properties>
                <hadoop.version>3.2.1</hadoop.version>
            </properties>
        </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    </dependencies>
</project>