0


在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

下载安装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_HOME:D:\apache-maven-3.8.8

M2_HOME:D:\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

大功告成!!

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

也欢迎大家在评论区讨论


本文转载自: https://blog.csdn.net/weixin_45461739/article/details/142662537
版权归原作者 石头剪子布终不换 所有, 如有侵权,请联系我们删除。

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

还没有评论