软件:Hadoop+IEDA2022+Jdk13
建议按照JDK-IDEA-Hadoop的顺序进行安装

1.JDK13下载、安装及环境配置

1.1 下载

  1. 直接使用华为的镜像下载:https://repo.huaweicloud.com/java/jdk/

1.2安装

除了修改安装目录之外,其他的一路【下一步】。如果C盘空间够的话建议直接装在C:\Program Files\Java中

1.3配置环境变量

  1. 打开”系统属性-高级-环境变量“

  2. 在“系统环境变量”中新建环境变量“JAVA_HOME”变量值为JDK的安装目录在这里插入图片描述

  3. 在用户变量中找到“path"点击编辑,添加"%JAVA_HOME%\bin"和"%JAVA_HOME%\jre\bin"在这里插入图片描述

  4. 在系统变量名中添加新变量““CLASSPATH”,值".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar"
    在这里插入图片描述

1.4测试JDK是否安装完成

  1. win+R输出cmd打开cmd.exe。
  2. 输入java -version,若得到以下结果则证明JDK安装成功
    在这里插入图片描述

2.IEDA下载安装

可以参考idea 2021 安装方法的下载安装方法。

3.Hadoop2.7.6下载、安装及文件配置

1.下载

百度网盘:https://pan.baidu.com/s/1t1bVzWzgCoIdAnhujGN3VA?pwd=b5l4 提取码:b5l4

2.安装

  1. 将下载好的文件解压,将Hadoop-2.7.6文件夹复制到D盘中,如下所示
    在这里插入图片描述

  2. 在winutils-master选择Hadoop2.7.6 ,将bin目录下的hadoop.dll文件复制到C:\Windows\System32目录下

  3. 在winutils-master选择Hadoop2.7.6 ,将bin目录复制到D:\work_software\hadoop-2.7.6(也就是刚刚的Hadoop安装目录)替代原文件的bin

3. 配置环境变量

  1. 在系统变量中添加"HADOOP_HOME",变量值为安装路径。如下图所示
    在这里插入图片描述

  2. 在用户变量-path中添加变量%HADOOP_HOME%\bin
    在这里插入图片描述

  3. 在cmd中输入hadoop -version命令,出现下图信息则证明安装成功
    在这里插入图片描述

4.集群配置

打开hadoop2.7.6的安装文件夹,打开etc/hadoop
在这里插入图片描述

接下来就是修改其中文件的代码,不然hadoop无法运行

4.1修改hadoop-env.cmd

JAVA_HOME的值修改为以下形式

JAVA_HOME=C:\PROGRA~1\Java\jdk-13

4.2 修改hdfs-site.xml

注意下列文件夹中的namespace_logsdata文件夹是需要自己先创建的
在这里插入图片描述

<configuration>
   <property>
     <name>dfs.replication</name>
     <value>1</value>
   </property>
   <property>
     <name>dfs.name.dir</name>
     <value>file:///D:/work_software/hadoop-2.7.6/namespace_logs</value>
   </property>
   <property>
     <name>dfs.data.dir</name>
     <value>file:///D:/work_software/hadoop-2.7.6/data</value>
   </property>
</configuration>

4.3修改 mapred-site.xml

若是没有mapred-site.xml文件的话,将mapred-site.xml.template改名为mapred-site.xml
注意:将代码中的username改为自己的Windows用户名,查看用户名的方法如下
在这里插入图片描述

<configuration>
   <property>
      <name>mapreduce.job.user.name</name>
      <value>username</value>
    </property>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
    </property>
  <property>
     <name>yarn.apps.stagingDir</name>
     <value>/user/username/staging</value>
   </property>
  <property>
     <name>mapreduce.jobtracker.address</name>
     <value>local</value>
   </property>
   <property>  
   <name>mapred.job.tracker</name>  
   <value>hdfs://localhost:9001</value>  
   </property>
</configuration>

4.4修改 yarn-site.xml

configuration添加下列代码

<configuration>
   <property>
     <name>yarn.server.resourcemanager.address</name>
     <value>0.0.0.0:8020</value>
   </property>
  <property>
     <name>yarn.server.resourcemanager.application.expiry.interval</name>
     <value>60000</value>
   </property>
  <property>
     <name>yarn.server.nodemanager.address</name>
     <value>0.0.0.0:45454</value>
   </property>
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
   </property>
  <property>
     <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
  <property>
     <name>yarn.server.nodemanager.remote-app-log-dir</name>
     <value>/app-logs</value>
   </property>
  <property>
     <name>yarn.nodemanager.log-dirs</name>
     <value>/dep/logs/userlogs</value>
   </property>
  <property>
     <name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name>
     <value>0.0.0.0</value>
   </property>
  <property>
     <name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name>
     <value>0.0.0.0</value>
   </property>
  <property>
     <name>yarn.log-aggregation-enable</name>
     <value>true</value>
   </property>
  <property>
     <name>yarn.log-aggregation.retain-seconds</name>
     <value>-1</value>
   </property>
  <property>
     <name>
     yarn.application.classpath
     </name>
     <value>%HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*</value>
   </property>
</configuration>

4.5初始化变量环境及格式化文件系统

  1. 打开Windows的cmd
  2. 输入%HADOOP_HOME%\etc\hadoop\hadoop-env.cmd,完成初始化环境变量
  3. 输入hadoop namenode -format,完成格式化系统文件。这时候会有一大堆指令,只要看到下列代码就说明格式化成功。否则就应该去检查配置文件的时候是否出现错误。
INFO common.Storage: Storage directory D:\work_software\hadoop-2.7.6\namespace_logs has been successfully formatted.

4.6开启hadoop集群

在经历上述配置之后,我们就算配置完成了,接下来就可以打开hadoop集群。
在cmd中输入下列命令

%HADOOP_HOME%/sbin/start-all.cmd

这时候会跳出很多的窗口在这里插入图片描述

继续再cmd中输入下列命令

jps

就可以查看目前有哪些节点打开了。
在这里插入图片描述

接着我们打开本地浏览器,输入localhost:50070,如果能打开下列网页,说明hadoop就成功开启了在这里插入图片描述

5.MapReduce测试之-Wordcount

接下来我们可以在IDEA上编写一些程序测试我们的hadoop集群,

5.1创建maven工程

在这里插入图片描述

5.2 修改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>dblab</groupId>  
    <artifactId>WordCount</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <hadoop.version>2.7.6</hadoop.version>  
    </properties>
      
    <dependencies>
        <!-- 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-mapreduce-client-jobclient</artifactId>  
            <version>${hadoop.version}</version>  
        </dependency>
    </dependencies>
      
    <build>        
	    <plugins>
		    <!-- Java 1.8 -->  
            <plugin>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <version>3.6.0</version>  
                <configuration>                    
	                <source>1.8</source>  
                    <target>1.8</target>  
                </configuration>            
            </plugin>       
        </plugins>    
    </build>  
    
</project>

5.3导入maven仓库

文件->设置->构建、执行、部署->构建工具->Maven->仓库->选择类型为local的本地仓库,点击更新,再点击确定。
左边的外部库以及右边Maven中的依赖项中导入了许多的包,这就成功导入了maven仓库。
在这里插入图片描述

5.4编写log4j.proporties配置文件

在src/main/resources目录下创建log4j.proporties文件,注意这个资源包就是proporties文件
在这里插入图片描述

编写如下代码

log4j.rootLogger=debug, stdout, R  
  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  
# Pattern to output the caller's file name and line number.  
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n  
  
log4j.appender.R=org.apache.log4j.RollingFileAppender  
log4j.appender.R.File=example.log  
  
log4j.appender.R.MaxFileSize=100KB  
# Keep one backup file  
log4j.appender.R.MaxBackupIndex=5  
  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

5.5编写java文件

在src/main/java/org.example中创建.java文件,命名为word_count。写入如下代码。

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.Mapper;  
import org.apache.hadoop.mapreduce.Reducer;  
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
import org.apache.hadoop.fs.Path;  
import java.io.IOException;  
  
/**  
 * 单词统计  
 * map阶段 分组 java:1 java:1 hadoop:1 hadoop:1  
 * reduce阶段 聚合 java:{1,1} hadoop:{1,1} java:2  
 */
public class Word_count { 

    public static class WordMapper extends Mapper<LongWritable,Text,Text,LongWritable>{  
        @Override  
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {  
            String line = value.toString();  
            String[] words = line.split(",");  
            for (String word : words) {  
                context.write(new Text(word),new LongWritable(1));  
            }  
        }  
    }  
  
    //中间通过suffer阶段合并排序  
    // key:{1,1,1,1,1,1....}  
    public static class WordReduce extends Reducer<Text,LongWritable,Text,LongWritable>{  
        @Override  
        protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {  
            //统计每个单词的累加结果  
            int count = 0;  
            for (LongWritable value : values) {  
                count+=value.get();  
            }  
            context.write(key,new LongWritable(count));  
        }  
    }  
    // maia方法中构建mapreduce任务 通过Job类构建  
    public static void main(String[] args) throws Exception {  
        Job job = Job.getInstance();  
        job.setJobName("统计每行多少单词");  
        job.setJarByClass(Word_count.class);  
  
        //mapreduce的输出格式  
        job.setMapperClass(WordMapper.class);  
        job.setMapOutputKeyClass(Text.class);  
        job.setMapOutputValueClass(LongWritable.class);  
  
        job.setReducerClass(WordReduce.class);  
        job.setOutputKeyClass(Text.class);  
        job.setOutputValueClass(LongWritable.class);  
  
        //指定路径 注意:输出路径不能已存在,输入输出路径指定Windows文件系统文件路径  
        Path input = new Path("D:\\word.txt");  
        Path output = new Path("D:\\output");  
        FileInputFormat.addInputPath(job,input);  
        //路径不能已存在  
        // 手动加上 如果存在就删除 FileSystem        
        FileSystem fileSystem = FileSystem.get(new Configuration());  
        if (fileSystem.exists(output)){  
            fileSystem.delete(output,true);//true代表迭代删除多级目录  
        }  
        FileOutputFormat.setOutputPath(job,output);  
  
        //启动job  
        job.waitForCompletion(true);  
        System.out.println("统计一行多少个单词");  
    }  
  
}

注意:

  1. 在运行代码前要先在下图所示路径中创建word.txt文件,output不能提前创建。在这里插入图片描述

  2. 要先启动hadoop才能运行代码。

5.6运行结果

在这里插入图片描述

在D:\output\part-r-00000中查看结果
在这里插入图片描述

代码运行完毕可以输入以下命令关闭集群

%HADOOP_HOME%/sbin/start-all.cmd
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐