在Windows的VSCode上配置Java-Hadoop开发环境,并用MapReduce实现WordCount功能

参考博客:
1. VSCode:VSCode+Maven+Hadoop开发环境搭建 - orion-orion - 博客园 (cnblogs.com)

2. vscode搭建java开发环境-[保姆级教程]_vscode配置java开发环境-CSDN博客

3. 超详细MapReduce程序实现WordCount案例_描述下wordcount程序中key-value的转换过程, 并标出所属阶段-CSDN博客

4. 全站最全Maven下载安装配置教学(2024更新...全版本)建议收藏...赠送IDEA配置Maven教程-CSDN博客 

目录​​​​​​​

一、配置与安装JDK

二、安装vscode插件

三、配置与安装Maven

1. 下载

2. 配置环境变量

3. 配置settings.xml文件

(1)配置阿里云镜像

(2)配置JDK

(3)配置本地仓库

4. 测试Maven

四、新建Maven项目

五、配置Maven的pom.xml文件

1. 添加依赖项

2. 添加属性

3. 测试

六、 用MapReduce实现WordCount

1. WordCountMapper.java

2. WordCountReducer.java

3. WordCount.java

4. 编译并生成jar包

5. 运行


一、配置与安装JDK

下载安装jdk1.8.0_301

网盘链接:百度网盘 请输入提取码 (baidu.com)

提取码:1234

添加环境变量JAVA_HOME: C:\Program Files\Java\jdk1.8.0_301

在系统变量PATH中添加C:\Program Files\Java\jdk1.8.0_301\bin

打开cmd,输入java -version,出现下图即安装成功

二、安装vscode插件

在vscode的扩展中安装java extension pack

注意不是extension pack for java!!

java extension pack包含所有Java开发所需的插件,也包括extension pack for java

安装需要一些时间,我是三分钟左右

三、配置与安装Maven

1. 下载

官网:Maven – Welcome to Apache Maven

最新版本下载:Maven – Download Apache Maven

历史版本下载:Index of /dist/maven/maven-3

我下载的3.8.8版本,Windows用户安装下面的,MAC和Linux用户安装上面的

最好别安装到系统盘

在安装目录下新建repository文件夹,用作本地的Maven仓库,如图

2. 配置环境变量

新建MAVEN_HOMED:\apache-maven-3.8.8

M2_HOMED:\apache-maven-3.8.8\repository

在系统变量Path中添加:%MAVEN_HOME%\bin

3. 配置settings.xml文件

打开D:\apache-maven-3.8.8\conf下的settings.xml文件,可以用记事本或vscode打开并编辑,推荐使用vscode,因为记事本打开看起来很乱

(1)配置阿里云镜像

    <!-- 阿里云仓库 -->
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>

将以上代码添加到下图所示位置:

(2)配置JDK

    <profile>
      <id>jdk-1.8</id>

      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>

      <properties>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
          <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>

将以上代码添加到下图所示位置:

(3)配置本地仓库

<localRepository>D:\apache-maven-3.8.8\repository</localRepository>

将以上代码添加到下图所示位置:

4. 测试Maven

打开cmd,输入mvn -version,得到结果如图:

四、新建Maven项目

在vscode上面的搜索框中输入>java create

然后弹出一个选择项目文件夹的对话框,自己选一个

然后终端会初始化Maven配置,如图,请耐心等待:

中间会出现一些询问,回车以继续即可,最后是这样:

然后打开项目文件夹,长这样:

此时直接运行APP.java会出现报错,别急,进入第五步配置文件

五、配置Maven的pom.xml文件

1. 添加依赖项

在如图位置添加:

${hadoop.version}的使用可以在更改Hadoop版本时不用一个一个改

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- 导入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>
    </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>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-api</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
  </dependencies>

2. 添加属性

在如图位置添加:

  <!-- 集中定义版本号 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <hadoop.version>2.7.1</hadoop.version> <!--这里追加hadoop版本号-->
  </properties>

这里修改了<maven.compiler.source><maven.compiler.target>为1.8,解决了上面那个报错

然后保存,这时项目会重新解析pom.xml文件

右下角出现的对话框点yes

右上角会有个旋转的按钮,点击以重启项目

3. 测试

运行APP.java,结果如图:

修改APP.java,尝试导入Hadoop相关包

能运行成功就没问题

package com.example;

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * Hello world!
 *
 */
public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

六、 用MapReduce实现WordCount

代码都跟APP.java在同一个目录下

1. WordCountMapper.java

package com.example;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] words = value.toString().split("\\s+");
        for (String w : words) {
            word.set(w);
            context.write(word, one);
        }
    }
}

2. WordCountReducer.java

package com.example;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context)
            throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        context.write(key, new IntWritable(sum));
    }
}

3. WordCount.java

package com.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;

public class WordCount {

    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: WordCount <input path> <output path>");
            System.exit(-1);
        }

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "Word Count");

        job.setJarByClass(WordCount.class);

        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

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

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

4. 编译并生成jar包

cd到wordcount目录下,运行如下指令

javac -classpath "%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\yarn\*" -d . src\main\java\com\example\WordCount.java src\main\java\com\example\WordCountMapper.java src\main\java\com\example\WordCountReducer.java

会生成com\example文件夹,然后再运行

jar -cvf wordcount.jar -C . com\example

这时生成了wordcount.jar文件

5. 运行

在wordcount目录下新建一个word.txt文件,内容为:

hello world hello world hello

然后运行:

hadoop jar wordcount.jar com.example.WordCount word.txt output_dir

注意:output_dir必须是当前不存在的目录

结果如下,生成了part-r-00000文件:

运行如下指令查看结果:

type output_dir\part-r-00000

大功告成!!

如果有用的话请留下你的赞和收藏,这是我不断创作的动力!!

也欢迎大家在评论区讨论

首先,我们需要在Eclipse中创建一个MapReduce项目,并导入Hadoop相关的jar包。然后,我们编写WordCount的Map和Reduce函数代码。Map函数负责将输入的数据切分为单词,并将每个单词作为key输出,value为1,即每个单词出现一次;Reduce函数则负责将相同单词的value相加,得到该单词的总出现次数。 接下来,我们需要将编写好的代码打包成jar包,并上传到Hadoop集群中的某个目录。在运行MapReduce任务之前,我们需要先将输入数据存储到Hadoop集群中的某个目录中。假设我们将输入数据存储在hdfs://localhost:9000/input/目录下。 然后,我们使用hadoop命令在集群上运行MapReduce任务,具体命令为: ``` hadoop jar WordCount.jar WordCount hdfs://localhost:9000/input/ hdfs://localhost:9000/output/ ``` 其中,hadoop jar命令表示使用hadoop命令运行jar包,WordCount.jar为我们打包好的jar包,WordCount为程序的主类名,hdfs://localhost:9000/input/为输入数据的路径,hdfs://localhost:9000/output/为输出结果的路径。 当我们运行该命令时,Hadoop会将输入数据分片,并将每个分片交给Map任务进行处理。Map任务会对输入数据进行处理,并将处理结果输出到本地磁盘上的一个临时文件中。Reduce任务会将所有Map任务的输出结果汇总起来,并将相同单词的value相加。最后,Reduce任务将输出结果存储到指定的输出目录中,我们可以通过hadoop fs -cat命令查看输出结果。 整个过程中,Eclipse-Hadoop插件提供了代码编写、打包、上传和调试等方便的功能,使得MapReduce编程变得更加简单和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值