杰瑞科技汇

Hadoop平台搭建教程难不难?新手如何快速上手?

  1. 环境准备:准备虚拟机网络、主机名、防火墙等基础环境。
  2. 安装 JDK:Hadoop 的运行依赖 Java 环境。
  3. 安装 Hadoop:解压、配置环境变量。
  4. 配置 Hadoop 核心文件:这是搭建最关键的一步,涉及 core-site.xml, hdfs-site.xml, yarn-site.xmlworkers
  5. 格式化 HDFS 集群:首次启动前必须执行的操作。
  6. 启动与验证:启动集群、检查进程、验证 HDFS 和 YARN 功能。
  7. 常见问题与排错:提供一些常见问题的解决方案。

第一步:环境准备

在开始之前,你需要准备以下环境:

Hadoop平台搭建教程难不难?新手如何快速上手?-图1
(图片来源网络,侵删)
  • 操作系统:推荐使用 CentOS 7 或 Ubuntu 18.04/20.04,本教程以 CentOS 7 为例。
  • Hadoop 版本:推荐使用稳定版,如 Hadoop 3.3.6。
  • 网络配置:确保所有节点(虚拟机)之间可以 ping 通,推荐配置静态 IP 或使用主机名互相解析。
  • 主机规划:这里我们搭建一个 3 节点的集群,角色分配如下:
主机名 IP 地址 角色
hadoop101 168.1.101 NameNode, ResourceManager, DataNode, NodeManager
hadoop102 168.1.102 SecondaryNameNode, DataNode, NodeManager
hadoop103 168.1.103 DataNode, NodeManager

关闭防火墙和 SELinux

为了简化部署,我们先关闭防火墙和 SELinux。

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
# 永久关闭,需要重启生效
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

配置主机名和 hosts 文件

所有节点 上执行。

# 设置主机名 (根据节点不同进行设置)
hostnamectl set-hostname hadoop101
# 重启后生效,或者直接执行 bash
bash
# 编辑 hosts 文件
vim /etc/hosts

hosts 文件中添加以下内容:

168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103

配免密登录

hadoop101 节点(主节点)上配置,然后分发给其他节点。

# 1. 生成密钥对 (一路回车即可)
ssh-keygen -t rsa
# 2. 将公钥拷贝到本机和其他所有节点
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103

测试免密登录:

ssh hadoop102
# 如果不需要输入密码就登录成功,则配置正确
exit

安装 JDK

所有节点 上安装 JDK,推荐使用 OpenJDK 1.8。

# 下载 JDK (或使用 yum 安装)
wget https://download.oracle.com/java/17/archive/jdk-17.0.2_linux-x64_bin.tar.gz
# 创建安装目录
mkdir -p /usr/local/java
# 解压
tar -zxvf jdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/java/
# 配置环境变量
vim /etc/profile

在文件末尾添加:

export JAVA_HOME=/usr/local/java/jdk-17.0.2
export PATH=$PATH:$JAVA_HOME/bin

让环境变量生效:

source /etc/profile

验证安装:

java -version
javac -version

应显示相应的版本信息。


第二步:安装 Hadoop

hadoop101 节点(主节点)上操作,然后同步到其他节点。

下载并解压

# 创建 Hadoop 安装目录
mkdir -p /opt/module
# 下载 Hadoop (以 3.3.6 为例)
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
# 解压
tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/

配置环境变量

所有节点/etc/profile 文件中添加 Hadoop 环境变量。

vim /etc/profile

在文件末尾添加:

export HADOOP_HOME=/opt/module/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

让环境变量生效:

source /etc/profile

验证安装:

hadoop version

应显示 Hadoop 的版本信息。

同步到其他节点

hadoop101 节点上执行,将 Hadoop 安装目录同步到 hadoop102hadoop103

# 同步 Hadoop 安装目录
scp -r /opt/module/hadoop-3.3.6/ root@hadoop102:/opt/module/
scp -r /opt/module/hadoop-3.3.6/ root@hadoop103:/opt/module/
# 同步环境变量文件
scp /etc/profile root@hadoop102:/etc/
scp /etc/profile root@hadoop103:/etc/
# 在 hadoop102 和 hadoop103 上分别执行
source /etc/profile

第三步:配置 Hadoop 核心文件

所有配置文件都位于 $HADOOP_HOME/etc/hadoop/ 目录下,我们将在 hadoop101 节点上配置,然后同步到其他节点。

core-site.xml (HDFS 核心配置)

vim $HADOOP_HOME/etc/hadoop/core-site.xml

添加以下配置:

<configuration>
    <!-- 指定 HDFS 中 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:8020</value>
    </property>
    <!-- 指定 Hadoop 运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.3.6/data</value>
    </property>
</configuration>

hdfs-site.xml (HDFS 站点配置)

vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

添加以下配置:

<configuration>
    <!-- 指定 HDFS 副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 指定 NameNode 的数据存储目录 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/module/hadoop-3.3.6/data/dfs/name</value>
    </property>
    <!-- 指定 DataNode 的数据存储目录 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/module/hadoop-3.3.6/data/dfs/data</value>
    </property>
    <!-- 指定 SecondaryNameNode 的地址 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop102:9868</value>
    </property>
</configuration>

yarn-site.xml (YARN 站点配置)

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

添加以下配置:

<configuration>
    <!-- 指定 YARN 的 ResourceManager 的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop101</value>
    </property>
    <!-- reducer 获取数据的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 日志聚集功能开启 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日志保留时间 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
</configuration>

mapred-site.xml (MapReduce 配置)

# 首先需要重命名模板文件
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

添加以下配置:

<configuration>
    <!-- 指定 MapReduce 运行在 YARN 上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

workers (指定从节点/数据节点)

这个文件定义了哪些节点是 DataNode 和 NodeManager。注意:新版本的 Hadoop 使用 workers 而不是 slaves

vim $HADOOP_HOME/etc/hadoop/workers

如下,每一行一个主机名

hadoop101
hadoop102
hadoop103

同步配置文件

hadoop101 节点上,将整个 etc/hadoop 目录同步到其他节点。

scp -r $HADOOP_HOME/etc/hadoop/ root@hadoop102:$HADOOP_HOME/etc/
scp -r $HADOOP_HOME/etc/hadoop/ root@hadoop103:$HADOOP_HOME/etc/

第四步:格式化 HDFS 集群

此操作仅在首次搭建集群时执行,且会清空 HDFS 上的所有数据!

hadoop101 节点上执行。

hdfs namenode -format

如果看到 Exit status 0,并且输出中有 Storage directory /opt/module/hadoop-3.3.6/data/dfs/name has been successfully formatted. 的字样,说明格式化成功。


第五步:启动与验证

启动 HDFS 集群

hadoop101 节点上执行。

# 启动 HDFS
start-dfs.sh

启动 YARN 集群

hadoop101 节点上执行。

# 启动 YARN
start-yarn.sh

检查进程

所有节点 上使用 jps 命令检查进程是否启动成功。

  • hadoop101 (NameNode, ResourceManager):

    [root@hadoop101 hadoop-3.3.6]# jps
    1234 NameNode
    1454 ResourceManager
    1672 DataNode
    1788 NodeManager
    1922 Jps
  • hadoop102 (SecondaryNameNode):

    [root@hadoop102 hadoop-3.3.6]# jps
    1234 SecondaryNameNode
    1454 DataNode
    1672 NodeManager
    1788 Jps
  • hadoop103 (DataNode):

    [root@hadoop103 hadoop-3.3.6]# jps
    1234 DataNode
    1454 NodeManager
    1672 Jps

    如果进程与预期一致,说明集群启动成功。

Web UI 验证

打开浏览器,访问以下地址:

  • HDFS NameNode Web UI: http://hadoop101:9870

    你可以看到 Datanodes 信息,应该显示 3 个 live nodes。

  • YARN ResourceManager Web UI: http://hadoop101:8088

    你可以看到 Cluster、Nodes 等信息,能看到 3 个活跃的节点。

运行一个测试程序

这是验证集群功能是否可用的最佳方式。

# 1. 在 HDFS 上创建一个输入目录
hdfs dfs -mkdir -p /input
# 2. 将 Hadoop 自带的 jar 包作为输入文件上传到 HDFS
hdfs dfs -put $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar /input
# 3. 运行 WordCount 程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
# 4. 查看运行结果
hdfs dfs -cat /output/*

如果能看到单词和对应的词频统计结果,恭喜你!你的 Hadoop 集群已经成功搭建并可以正常工作了。


第六步:集群的常用操作

  • 关闭集群:

    # 先关闭 YARN
    stop-yarn.sh
    # 再关闭 HDFS
    stop-dfs.sh
  • 重新格式化集群:

    • 如果需要重新格式化,必须先停止所有服务
    • 然后删除 datalogs 目录下的所有内容。
    • 最后重新执行 hdfs namenode -format

常见问题与排错

  1. jps 进程不全

    • 原因:可能是启动脚本执行失败,或者节点间网络/免密登录有问题。
    • 解决:检查 hadoop101 节点的 hadoop-3.3.6/logs 目录下的日志文件(如 hadoop-root-namenode-hadoop101.log),根据错误信息排查。
  2. DataNode 启动失败,无法连接 NameNode

    • 原因:通常是 clusterID 不匹配,格式化 NameNode 后,data/dfs/name 目录下会生成一个 current/VERSION 文件,里面有一个 clusterID,DataNode 启动时也需要这个 ID,如果本地没有,会去 NameNode 获取,如果获取失败就无法启动。
    • 解决:确保所有节点的 data 目录是干净的,只在主节点上执行一次格式化,如果问题依旧,可以尝试删除所有节点的 datalogs 目录,然后重新格式化并启动。
  3. Web UI 无法访问

    • 原因:防火墙未关闭、端口未开放、或者主机名/IP 配置错误。
    • 解决:再次确认防火墙和 SELinux 已关闭,检查 core-site.xml 中的 fs.defaultFSyarn-site.xml 中的 yarn.resourcemanager.hostname 是否正确。
  4. MapReduce 任务失败

    • 原因:可能是 YARN 资源不足、输入输出路径错误、或者程序本身有 Bug。
    • 解决:在 YARN 的 Web UI (8088) 上查看任务失败的日志,点击失败的 Application,找到 "Logs" 链接,可以查看详细的错误堆栈信息。

这份教程涵盖了从零开始搭建一个功能完整的 Hadoop 集群的所有关键步骤,祝你搭建顺利!

分享:
扫描分享到社交APP
上一篇
下一篇