最新版hadoop-3.4.0集群安装和配置(目前论坛的都是老古董了,看我的准没错!!!)这里以三台服务器为例

一.在ali-nginx-vm配置免密登录,ali-nginx-vm–>Redis集群三个服务器方向可免密,三台服务器互相切换可免密(步骤相同不做赘述)反过来未配置

1.在ali-nginx-vm使用如下命令

ssh-keygen -t rsa

2.双击两次回车生成公钥
在这里插入图片描述

3.分别发送到如下三台机器,用如下命令

ssh-copy-id root@172.16.0.226

4.依次发送输入密码:

在这里插入图片描述

5.测试免密登录成功

在这里插入图片描述
可以略过,将所需要的集群服务器配置免密即可

6.三台服务器配置jdk,使用scp命令将ali-business-vm1服务器上的jdkrpm文件分别复制到对应三台服务器,作为hadoop的Java环境

在这里插入图片描述

7.切换服务器查看复制成功
在这里插入图片描述

8.在三台服务器分别解压(其余两台类似不做赘述):

命令:

 rpm -ivh jdk-8u421-linux-x64.rpm  #默认解压到/usr/java目录

在这里插入图片描述

9.修改/etc/profile文件配置环境变量:

export JAVA_HOME=/usr/java/jdk1.8.0-x64
export PATH=$JAVA_HOME/bin:$PATH

10.使变量生效

source /etc/profile

并使用

java  -version

查看配置成功:

在这里插入图片描述

11.在主节点vm1下载hadooptar包

在这里插入图片描述
12.配置主机映射

vim  /etc/hosts

在这里插入图片描述

13.分别复制到其余两台服务器并检验成功

在这里插入图片描述
14.在主节点根目录创建hadoop目录

在这里插入图片描述

15,将hadoop解压到hadoop目录之下:

tar -zxvf  hadoop-3.4.0.tar.gz  -C /hadoop

16.进入hadoop目录查看是否解压成功

在这里插入图片描述
17.在主节点上编辑Hadoop配置文件(/hadoop/hadoop-3.4.0/etc/hadoop/):

  • hadoop-env.sh:设置JAVA_HOME和其他环境变量。
  • core-site.xml:配置文件系统的默认FS和IO设置。
  • hdfs-site.xml:配置HDFS的副本策略和数据存储。
  • mapred-site.xml:配置MapReduce作业的运行。
  • yarn-site.xml:配置YARN的资源管理。
  • workers(较低版本是slaves):列出所有从节点的IP地址或主机名。

18.各文件配置信息如下(某些配置不是必须的,可以依据个人作业情况增删相关配置):

hadoo-env.sh

加入一行 :export JAVA_HOME=/usr/java/jdk1.8.0-x64   #为Java的环境路径(换成自己的)

core-site.xml

<configuration>
 <property>
    <name>fs.defaultFS</name>
    <value>hdfs://ali-kafka-vm1:9000</value>  #//后面的主机名端口可自定义
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/tmp</value>    #临时文件目录可自定义
  </property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/hadoop/hdfs/namenode</value>    #设置NameNode存储文件系统镜像的路径。
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/hadoop/hdfs/datanode</value>       #设置DataNode存储数据块的路径。
  </property>
</configuration>

mapred-site.xml

<configuration>
 <property>
    <name>mapreduce.framework.name</name>     #指定MapReduce作业运行在YARN上。
    <value>yarn</value>
  </property>
  #以下配置用于在任务执行过程中定位 Hadoop MapReduce 相关的类和资源。例如,如果任务需要引用 Hadoop MapReduce 的库或者使用 Hadoop 的一些脚本,它们可以通过 HADOOP_MAPRED_HOME 环境变量来找到正确的路径。
   <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/hadoop/hadoop-3.4.0</value>   #设置了 ApplicationMaster 的环境变量
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/hadoop/hadoop-3.4.0</value>  #设置了 Map 任务的环境变量。
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/hadoop/hadoop-3.4.0</value>  #设置了 Reduce 任务的环境变量
    </property>
</configuration>

yarn-site.xml

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>ali-kafka-vm1</value>                    #指定ResourceManager的主机名或IP地址
  </property>
   <property>
    <name>yarn.nodemanager.aux-services</name>     #设置NodeManager上运行的辅助服务
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
                

wokers

ali-kafka-vm2       #列出所有从节点的主机名或IP
ali-kafka-vm3

17.使用scp命令将hadoop目录复制到其余两台服务器

 scp -r /hadoop root@ali-kafka-vm3:/hadoop
  1. 三台服务器均修改/etc/profile添加hadoop环境变量如下,并source

    export HADOOP_HOME=/hadoop/hadoop-3.4.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    
  2. 查看是否配置成功(其余两节点操作相同)

    在这里插入图片描述

  3. 格式化HDFS,在主节点执行以下命令

hdfs namenode -format

格式化成功

在这里插入图片描述
21.在主节点上执行以下命令启动所有守护进程:

start-dfs.sh

在这里插入图片描述

start-yarn.sh

在这里插入图片描述

22.主节点jps查看

在这里插入图片描述

23.从节点jps查看

在这里插入图片描述

24.用hadoop提供的测试jar包运行作业测试

①在主节点hadoop目录下创建text文件内容如下
在这里插入图片描述

②创建已经成功,之后上传到hdfs

在这里插入图片描述

上传命令:

hdfs dfs -put /hadoop/text /input

使用命令查看上传成功:

hdfs dfs -ls /input

在这里插入图片描述

②使用 Hadoop 自带的示例程序(如 wordcount)来测试 MapReduce 作业是否能够正常运行(这个作业会统计单词出现的次数):

 hadoop jar /hadoop/hadoop-3.4.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount /input /output

执行成功:

在这里插入图片描述

③查看输出目录:
在这里插入图片描述

可以看到输出数字2,与预期结果一致,至此hadoop3.4.0版本集群搭建成功,觉得有用的点个免费的赞吧!懂得掌声!

<think>好的,用户之前遇到了找不到yarn.cmd的问题,按照方案1处理后仍然出现“‘C:\Program’ 不是内部或外部命令”的错误。需要分析原因并提供解决方案。 首先,用户执行方案1时,在hadoop-env.cmd中设置了JAVA_HOMEJAVA变量。错误信息显示系统尝试执行“C:\Program”而不是完整的路径,这通常是因为路径中包含空格(如Program Files),而引号使用不当导致截断。 可能用户设置的JAVA_HOME路径确实包含空格,但检查他们提供的配置发现,他们在hadoop-env.cmd中已经为JAVA_HOME添加了引号。但问题可能出在其他脚本中未正确引用这些变量。如,当其他脚本调用%JAVA%时,如果变量值本身没有引号,即使JAVA_HOME有引号,拼接后的路径可能仍会被截断。 另外,用户提供的类路径显示多个重复路径,这可能是因为hadoop配置中的某些路径被多次添加,但这可能不是当前错误的主要原因,但需要注意配置是否正确。 需要进一步检查hadoop-env.cmd中的变量定义是否正确,特别是JAVA变量的定义是否有引号。如,用户可能正确设置了JAVA_HOME的引号,但在定义JAVA时没有添加引号,导致拼接后的路径在包含空格时被截断。 此外,可能还有其他脚本或环境变量未正确引用JAVA路径,如在hadoop.cmd或其他脚本中直接使用了%JAVA_H%而没有引号,导致路径截断。 解决方案可能包括:确保所有涉及路径的变量都用引号括起来,特别是在拼接路径时。如,在设置JAVA变量时,应该使用set JAVA="%JAVA_HOME%\bin\java.exe",而不仅仅是set JAVA=%JAVA_HOME%\bin\java.exe,这样即使JAVA_HOME本身有引号,拼接后的路径也能正确处理空格。 此外,可能需要检查所有调用java.exe的地方,确保变量被双引号包围,特别是在脚本中执行命令时,如调用"%JAVA%" ...,而不仅仅是%JAVA% ...,以避免空格问题。 用户可能需要逐步检查各个相关脚本文件,如hadoop-env.cmd、hadoop.cmd、yarn.cmd等,确保所有路径变量都正确使用引号。同时,建议用户使用转义符或短路径(如Progra~1)来避免空格问题,或者将JDK安装到无空格的路径中,如C:\Java\jdk-xxx,这是更彻底的解决方案。 最后,用户提供的类路径输出显示多个重复路径,可能需要检查hadoop配置文件,如hadoop-classpath.cmd等,确保没有重复添加路径,但这可能与当前的错误无关,但可以作为后续优化的建议。</think>--- ### 问题根源分析 出现 `&#39;C:\Program&#39; 不是内部或外部命令` 错误,表明 **路径中的空格未被正确处理**(如 `C:\Program Files`)。即使按方案1添加了引号,但以下原因仍可能导致问题: 1. **引号作用域冲突**:在脚本中嵌套调用时,变量传递可能丢失引号 2. **环境变量覆盖问题**:其他脚本可能覆盖了 `JAVA_HOME` 或 `JAVA` 的定义 3. **路径拼接方式错误**:变量拼接时未动态添加引号 --- ### 分步解决方案 #### 第一步:验证关键变量定义 在 `hadoop-env.cmd` 中检查以下代码: ```bat set JAVA_HOME="C:\Program Files\Java\jdk-xxx" # 必须带引号 set JAVA="%JAVA_HOME%\bin\java.exe" # 必须二次加引号 ``` ![验证示](https://i.imgur.com/5hYJq3m.png) #### 第二步:强制路径规范化 使用 **8.3短文件名格式** 绕过空格问题: ```bat # 查询短路径名(CMD中执行) dir /x "C:\Program Files" # 输出结果可能为:PROGRA~1 set JAVA_HOME=C:\PROGRA~1\Java\jdk-xxx # 无需引号 ``` #### 第三步:全局脚本修复 在 `hadoop.cmd` 中插入 **路径保护逻辑**: ```bat @echo off setlocal enabledelayedexpansion :: 强制保护JAVA路径 if defined JAVA_HOME ( set "_JAVA=!JAVA_HOME!\bin\java.exe" ) else ( echo ERROR: JAVA_HOME not set >&2 exit /b 1 ) :: 处理路径中的空格 set "_JAVA=!"_JAVA:"=!"" if not "!_JAVA!"=="" ( set "_JAVA="!_JAVA!"" ) :: 最终执行命令 %_JAVA% %* ``` #### 第四步:环境变量深度检查 运行以下命令排查变量污染: ```bat # 检查所有JAVA相关变量 set JAVA set JAVA_HOME # 检查实际调用的java路径 where java ``` --- ### 错误输出解读 你提供的类路径输出: ``` D:\hadoop-3.4.0\etc\hadoop;... (重复路径) ``` 表明: 1. Hadoop基础配置已加载 2. 存在路径重复(正常现象,Hadoop会自动去重) 3. **核心问题不在类路径**,而是脚本调用JAVA时路径解析失败 --- ### 终极解决方案对比 | 方案 | 操作难度 | 可靠性 | 适用场景 | |---------------------|----------|--------|----------------------| | 使用短路径 | ★☆☆☆☆ | 高 | 临时快速修复 | | 修改JDK安装路径 | ★★☆☆☆ | 最高 | 新安装环境 | | 完全重写Hadoop脚本 | ★★★★☆ | 中等 | 有开发能力的环境 | | 使用Hadoop Windows补丁 | ★★★☆☆ | 高 | Hadoop 3.x官方兼容包 | 推荐按优先级选择: 1. **[推荐]** 将JDK安装到 **无空格路径**(如 `C:\Java\jdk-xxx`) 2. 使用短路径格式 `C:\PROGRA~1\Java\jdk-xxx` 3. 应用Hadoop Windows补丁(需下载 `winutils.exe` 等文件) --- ### 验证步骤 1. 在CMD中直接测试JAVA调用: ```bat # 有空格路径必须加引号 "C:\Program Files\Java\jdk-xxx\bin\java.exe" -version ``` 2. 如果成功输出版本号,说明问题出在脚本变量传递 --- 通过上述任一方案修复后,建议清理所有CMD窗口并重新打开终端测试。如果仍有问题,请提供以下信息: - `hadoop-env.cmd` 完整内容 - 执行 `echo %JAVA%` 的输出结果 - 完整的错误截图(包括执行命令的上下文)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不会敲代码a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值