参考博客:
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
提取码: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
大功告成!!
如果有用的话请留下你的赞和收藏,这是我不断创作的动力!!
也欢迎大家在评论区讨论