一、实验目的

Hadoop核心组件包括HDFS、YARN和MapReduce。掌握集群安装配置、启动管理及运行MapReduce任务(如WordCount)的方法,理解节点分工与资源调度机制。

二、实验环境

  1. 操作系统:Linux(Ubuntu )
  2. Hadoop版本:Hadoop 3.x
  3. JDK版本:JDK 8或以上
  4. 节点配置:至少三个节点(1个Master节点,2个Slave节点)

三、实验前准备

1. 环境准备

  • 确保所有节点之间可以通过SSH无密码登录。

 

  • 每个节点上安装JDK,并配置JAVA_HOME环境变量。

1.在每个节点安装 JDK:

sudo apt update

sudo apt install openjdk-8-jdk

  

2.查找 JDK 安装路径:

update-alternatives --config java

(通常路径为/usr/lib/jvm/java-8-openjdk-amd64)

3.配置 JAVA_HOME 环境变量,编辑~/.bashrc文件:

vim ~/.bashrc

4.在文件末尾添加:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export PATH=$PATH:$JAVA_HOME/bin

5.使配置生效:

source ~/.bashrc

6.验证:执行echo $JAVA_HOME显示正确路径,java -version显示 JDK 版本信息即成功。

2. 下载安装Hadoop

在Hadoop官方网站下载Hadoop的二进制文件,并将其解压到指定目录。以Ubuntu系统为例:

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz【已归档,重新换个镜像网址wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz】

tar -zxvf hadoop-3.3.1.tar.gz -C /usr/local/

cd /usr/local/

mv hadoop-3.3.1 hadoop

改进:

进入家目录

cd ~

下载 3.4.0(2024-07 最新稳定版,可替换为任意版本)

wget https://downloads.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz

tar -xzf hadoop-3.4.0.tar.gz

sudo mv hadoop-3.4.0 /usr/local/hadoop

sudo chown -R $USER:$USER /usr/local/hadoop

四、Hadoop集群配置

1. 配置环境变量

在每个节点的~/.bashrc文件中添加以下内容:

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

执行以下命令使配置生效:

source ~/.bashrc

2. 配置Hadoop核心文件

a. core-site.xml

编辑$HADOOP_HOME/etc/hadoop/core-site.xml文件,添加以下配置:

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://master:9000</value>

    </property>

</configuration>

b. hdfs-site.xml

编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件,添加以下配置:

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:///usr/local/hadoop/hdfs/namenode</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:///usr/local/hadoop/hdfs/datanode</value>

    </property>

</configuration>

 

c. mapred-site.xml

将mapred-site.xml.template复制为mapred-site.xml,并编辑如下:

<configuration>

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

 

d. yarn-site.xml

编辑$HADOOP_HOME/etc/hadoop/yarn-site.xml文件,添加以下配置:

<configuration>

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

</configuration>

 

3. 配置Slave节点

在$HADOOP_HOME/etc/hadoop/slaves文件中,列出所有Slave节点的主机名,例如:

slave1

slave2

 

五、格式化HDFS文件系统

在Master节点上执行以下命令格式化HDFS:

hdfs namenode -format

六、启动Hadoop集群

1. 启动HDFS

在Master节点上执行以下命令:

start-dfs.sh

使用以下命令检查HDFS的运行状态:

Jps

2. 启动YARN

在Master节点上执行以下命令:

start-yarn.sh

同样使用jps命令检查YARN的运行状态。

七、验证集群的安装

1. 上传文件到HDFS

在Master节点上执行以下命令,将文件上传到HDFS:

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/hadoop

hdfs dfs -put $HADOOP_HOME/etc/hadoop/* /user/hadoop/

  

2. 运行一个MapReduce任务

在Master节点上执行以下命令运行一个简单的MapReduce任务:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /user/hadoop/* /user/hadoop/output【这个代码失效,用下一行代码】

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /user/hadoop /user/hadoop/output

3. 检查任务结果

任务完成后,使用以下命令查看结果:

hdfs dfs -cat /user/hadoop/output/part-r-00000

目前的状态是:​​完成了集群的安装和配置,但未能成功启动和运行。​​

​​核心问题分析:启动失败的原因​​

  1. ​​SSH无密码登录未配置(最根本的问题)​​:

    • 在您尝试启动YARN时,错误信息 ssh: connect to host localhost port 22: Connection refused和 Starting resource managers on []表明启动脚本无法通过SSH连接到任何节点(包括本地主机localhost)。

    • Hadoop的集群启动脚本(start-dfs.sh和 start-yarn.sh)依赖SSH来远程启动各个节点上的守护进程。​​即使所有节点都在同一台物理机上(使用localhost模拟),也需要配置SSH免密登录​​,否则脚本无法自动启动进程。

  2. ​​HDFS格式化可能不完整​​:

    • 虽然格式化命令 hdfs namenode -format显示了大量输出信息,但关键的成功提示 successfully formatted并未在您提供的信息中明确出现。需要确认格式化确实成功。

  3. ​​配置文件潜在错误​​:

    • 在运行MapReduce任务时出现的 error parsing conf core-site.xml错误,表明您的XML配置文件可能存在语法错误(例如标签未正确闭合、有多余字符等)。这会导致Hadoop守护进程无法正确读取配置,从而使整个集群失效。

​​结论与下一步操作建议​​

您的实验卡在了 ​​“第六步:启动Hadoop集群”​​。由于启动失败,后续的所有验证步骤(第七步)都无法进行。

​​要完成第二部分,您必须解决以上问题:​​

  1. ​​首先配置SSH免密登录到localhost​​:

    # 生成SSH密钥对(如果还没有) 
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
    # 将公钥追加到授权密钥文件中,以允许本机登录本机 
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
    # 测试SSH登录localhost是否需要密码 
    ssh localhost

    如果执行 ssh localhost后不需要输入密码就能成功登录又退出,则说明配置成功。这是​​必须完成​​的前置条件。

  2. ​​重新格式化HDFS(在解决SSH问题后)​​:

    hdfs namenode -format

    ​​务必确认​​命令输出中包含 successfully formatted字样。

  3. ​​仔细检查并修正XML配置文件​​:

    • 使用命令 xmllint检查配置文件语法:

      xmllint --noout $HADOOP_HOME/etc/hadoop/core-site.xml 
      xmllint --noout $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    • 确保文件内容​​严格遵循XML格式​​,特别是<configuration>标签的闭合。您提供的配置内容在语法上是正确的,但可能在实际操作中键入了多余字符或格式错误。

  4. ​​重新启动集群​​:

    • 解决上述所有问题后,重新启动集群:

      stop-dfs.sh 
      # 先停止(如果之前启动过) 
      stop-yarn.sh 
      start-dfs.sh 
      # 重新启动 
      start-yarn.sh 
      jps 
      # 检查进程,应看到NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager

       

  5. ​​重新进行功能验证​​:

    • 只有在 jps命令显示出所有关键进程后,才能继续执行第七步的上传文件、运行WordCount等操作。

 

更多推荐