0


JDK8+MAVEN3.6.3+HADOOP3.2.2,wordcount实践

一、所需工具

JDK8

maven3.6.3

Hadoop3.2.2

IntelliJ IDEA 2022.3.3

下载链接:https://pan.baidu.com/s/1x5-hLZXUP6oawGy4h693eQ?pwd=mona
提取码:mona

二、安装JDK

(一)温馨提示,不安装在C盘,且目录千万别有空格,否则后面会报错,无法在Windows中调用hadoop命令。

(二)下载JDK8

我的版本为jdk-8u152-windows-x64,可根据自身需要到官网下载合适的版本

(三)安装JDK

1.在D盘创建Java目录,并在Java目录中分别创建子目录jdk和jre

2.安装

点击jdk-8u152-windows-x64.exe,右键以管理员身份运行,点击“下一步”后,更改安装目录到D:\Java\jdk后下一步。

等到jre安装提示出来后,更改安装目录到D:\Java\jre后下一步。

安装完成后点击关闭。

(四)配置环境变量

1.点击“我的电脑”,右键,点击“属性”,选择“高级系统设置”,选择“环境变量”。

2.在系统变量的栏位中选择“新建”

3.添加JAVA_HOME,值为JDK的安装目录

4.将JAVA_HOME添加到Path中

选中系统变量栏位中的“Path”,点击“编辑”,点击新建后输入“%JAVA_HOME%\bin”,并将此条值上移。上移是为了保证系统会优先匹配我们的安装的JDK。

5.验证环境变量是否成功配置。Win+R,输入cmd,进入dos界面。依次输入java -version,java.exe和javac.exe,能成功显示相关内容,即证明JDK安装成功。

二、安装MAVEN

(一)下载Maven,我的版本为3.6.3

(二)安装。Maven属于绿色版软件,解压即安装。将其解压到D:\Program Files\apache-maven-3.6.3

(三)配置环境变量。与配置JDK类似,在环境变量中添加MAVEN_HOME,并将bin目录添加到Path中

(四)验证是否安装成功。Win+R,输入cmd,进入dos界面。输mvn,能成功显示相关内容,即证明Maven安装成功。

(五)本地仓库配置

1.在D盘创建本地仓库地址D:\maven\repository

2.将默认的仓库地址改成D:\maven\repository。到D:\Program Files\apache-maven-3.6.3\conf中,找到settings.xml,用编辑器打开编辑,大概54行位置,添加 <localRepository>D:\maven\repository</localRepository>。如果不改,默认位置会在C盘的C:\Users\T480s.m2\repository下,随着项目增多,C盘会爆。

(六)镜像仓库配置

到D:\Program Files\apache-maven-3.6.3\conf中,找到settings.xml,用编辑器打开,到160行位置编辑。配置镜像主要是为了提高国内用户下载依赖的速度和稳定性,同时方便管理和维护。

添加以下内容:

<mirror>

<id>nexus-aliyun</id>

<mirrorOf>central</mirrorOf>

<name>Nexus aliyun</name>

<url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

三、本地安装Hadoop

(一)下载Hadoop,我的版本为3.2.2

(二)解压至D:\hadoop-3.2.2

(三)在bin目录中添加hadoop.dll和winutils.exe。温馨提示,这两个文件一定要和Hadoop的版本匹配,如果不是3.2.2的版本,后面用的时候会报错。

(四)在C:\Windows\System32中也添加hadoop.dll

(五)配置环境变量。与配置JDK类似,在环境变量中添加HADOOP_HOME,并将bin目录添加到Path中

(六)配置hadoop-env.cmd

1.到D:\hadoop-3.2.2\etc\hadoop下找到hadoop-env.cmd

2.修改JAVA_HOME=D:\Java\jdk

(七)验证是否安装成功。Win+R,输入cmd,进入dos界面。输hadoop version,能成功显示相关内容,即证明Hadoop安装成功。

四、安装IDEA

(一)下载安装包,我的是2022.3.3

(二)安装IDEA到D:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3,可下载激活工具激活。不要安装在C盘就行

五、wordcount体验

(一)打开IDEA

(二)新建maven项目

1.点击File——New——project

2.创建项目名为wordcount.mr,项目存放到D:\workspace(可根据自身情况确定目录),语言选择Java,构建系统选择Maven

3.选择我们自己的JDK版本

4.选择本地Maven

(三)编辑项目

1.编辑pom.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>com.wordcount</groupId>
<artifactId>wordcount-mr</artifactId>
<version>1.0</version>

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

<dependencies>
     <!-- Hadoop dependencies -->
     <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>3.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.2.2</version>
    </dependency>
     <!-- 如果您的项目中确实需要hadoop-mapreduce-client-core,请保留并更新版本 -->
    <!-- 但通常hadoop-client已经包含了所需的MapReduce依赖 -->

     <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>3.2.2</version>
    </dependency>

     <!-- 其他依赖,如数据库连接器等 -->
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version> <!-- 考虑使用更新的版本 -->
             <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass></mainClass> <!-- 替换为您的主类名 -->
                     </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

2.等待依赖下载

3.观察依赖是否下载成功

4.创建mapper

添加如下代码:

package com.wordcount;

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

import java.io.IOException;

/**
** * ********@description:******
*** ******/**
public class WordCountMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
//Mapper输出kv键值对 <单词,1>
private Text keyOut = new Text();
private final static LongWritable **valueOut **= new LongWritable(1);

 @Override
 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
     //将读取的一行内容根据分隔符进行切割
     String[] words = value.toString().split("\\s+");
     //遍历单词数组
     for (String word : words) {
         keyOut.set(word);
         //输出单词,并标记1
         context.write(new Text(word),**valueOut**);
     }
}

}

5.创建reducer

添加以下代码

package com.wordcount;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
** * ********@description:******
*** ******/**
public class WordCountReducer extends Reducer<Text, LongWritable,Text,LongWritable> {

 private LongWritable result = new LongWritable();

 @Override
 protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
     //统计变量
     long count = 0;
     //遍历一组数据,取出该组所有的value
     for (LongWritable value : values) {
         //所有的value累加 就是该单词的总次数
         count +=value.get();
     }
     result.set(count);
     //输出最终结果<单词,总次数>
     context.write(key,result);
 }

}

6.创建driver

输入以下代码:

package com.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
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 WordCountDriver{
public static void main(String[] args) throws Exception {
//配置文件对象
Configuration conf = new Configuration();
// 创建作业实例
Job job = Job.getInstance(conf, WordCountDriver.class.getSimpleName());
// 设置作业驱动类
job.setJarByClass(WordCountDriver.class);
// 设置作业mapper reducer类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
// 设置作业mapper阶段输出key value数据类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//设置作业reducer阶段输出key value数据类型 也就是程序最终输出数据类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
// 配置作业的输入数据路径
FileInputFormat.addInputPath(job, new Path(args[0]));
// 配置作业的输出数据路径
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//判断输出路径是否存在 如果存在删除
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(args[1]))){
fs.delete(new Path(args[1]),true);
}
// 提交作业并等待执行完成
boolean resultFlag = job.waitForCompletion(true);
//程序退出
System.exit(resultFlag ? 0 :1);
}
}

7.配置log4j.properties

输入以下代码:

log4j.rootLogger=info,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG

(四)在本地运行项目

1.添加路径参数

先运行WordCountDriver

会提示错误,因为我们没有配置路径参数

这样配置

2.在D:\wordcount\input中添加文档1.txt。注意,input目录需要自己先建好,output可以不建。

3.运行

4.检验运行成功

(五)在集群运行项目

1.在pom.xml中添加主类

先在WordCountDriver中复制主类名

再在pom.xml中的相应位置添加

2.打包

3.查看jar包

4.集群测试

4.1启动集群

4.2创建数据目录

hdfs dfs -mkdir -p /wordcount-mr/input

4.3将1.txt上传到HDFS中的 /wordcount-mr/input

4.4将1.txt上传到主节点的/root

4.5将1.txt上传至 /wordcount-mr/input

4.6将jar包上传到主节点

4.7运行jar包(我的jar包当时的名字是wordcont-mr-1.0.jar,所以一定用自己的jar包的名字,不要搞错了)

hadoop jar wordcont-mr-1.0.jar /wordcount-mr/input /wordcount-mr/output

4.8到HDFS上查看运行结果


本文转载自: https://blog.csdn.net/weixin_66267720/article/details/143913506
版权归原作者 mona358 所有, 如有侵权,请联系我们删除。

“JDK8+MAVEN3.6.3+HADOOP3.2.2,wordcount实践”的评论:

还没有评论